1. 程式人生 > >kNN(k-nearest neighbor)理解與實現

kNN(k-nearest neighbor)理解與實現

一、理解

  kNN三要素:k值選擇、距離度量、分類決策規則
  流程:計算輸入例項與訓練集中各例項的距離,選出K個最近鄰訓練例項點,然後根據這K個點多數類進行分類。
  k值選擇:k值選得過小意味著用較小的鄰域中的訓練例項點來進行預測,易出現過擬合;k值過大則相反,易把不太相關的例項點也用來預測,導致出錯
  距離度量:Lp距離等,常用歐氏距離

二、實現

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的文章