kNN(k-nearest neighbor)理解與實現
阿新 • • 發佈:2019-02-05
一、理解
kNN三要素:k值選擇、距離度量、分類決策規則
流程:計算輸入例項與訓練集中各例項的距離,選出K個最近鄰訓練例項點,然後根據這K個點多數類進行分類。
k值選擇:k值選得過小意味著用較小的鄰域中的訓練例項點來進行預測,易出現過擬合;k值過大則相反,易把不太相關的例項點也用來預測,導致出錯
距離度量:
二、實現
def classify0(inX, dataSet, labels, k):
dataSetSize = dataSet.shape[0] #得到訓練資料集的樣本數
diffMat = np.tile(inX, (dataSetSize,1 )) - dataSet #計算歐式距離,tile(A,(m,n))將矩陣A構造成m行n列
sqDiffMat = diffMat**2
sqDistances = sqDiffMat.sum(axis=1) #sum(axis=1)按行累加,=0按列累加
distances = sqDistances**0.5
sortedDistIndicies = distances.argsort() #得到矩陣中每個元素的排序序號
classCount={}
for i in range(k):
voteIlabel = labels[sortedDistIndicies[i]]
classCount[voteIlabel] = classCount.get(voteIlabel) + 1 #D.get(k[,d])->D[k] if k in D,else d. d defaults to none
sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1), reverse=True)
#取出k個值出現頻率最高的,sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list
return sortedClassCount[0][0]
文章參考了wphh的文章