1. 程式人生 > >機器學習筆記(一)k-NN演算法

機器學習筆記(一)k-NN演算法

簡單地說,k-NN演算法就是根據測量不同特徵值之間的距離來進行分類的。
輸入沒有標籤的資料後,將新資料的每個特徵值的和樣本集的資料進行比較,然後提取樣本集中特徵最相似的資料,通常選取前k個最相似的資料,所有稱為k-鄰近演算法。
K-NN演算法的一般流程:
(1)收集資料:可以使用任何方法。
(2)準備資料:計算所需要的數值。
(3)分析資料:可以使用任何方法。
(4)訓練資料:不適用於k-NN演算法。
(5)測試演算法:計算準確率。
(6)使用演算法:首先處理資料,輸入樣本資料輸出結構化資料。
接著使用演算法進行分類,對資料進行後續處理。

最常見的兩點之間或多點之間的距離表示法,又稱之為歐幾里得度量,它定義於歐幾里得空間中,如點 x = (x1,…,xn) 和 y = (y1,…,yn) 之間的距離為:
這裡寫圖片描述

k-NN演算法的核心程式碼如下:

def classify0(inX, dataSet, labels, k):  #inX輸入測試資料,dataSet資料集,labels資料集的標籤,k的大小
    dataSetSize = dataSet.shape[0]
    diffMat = tile(inX, (dataSetSize,1)) - dataSet 
    sqDiffMat = diffMat**2
sqDistances = sqDiffMat.sum(axis=1) distances = sqDistances**0.5 sortedDistIndicies = distances.argsort() classCount={} for i in range(k): voteIlabel = labels[sortedDistIndicies[i]] classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1 sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1
), reverse=True) return sortedClassCount[0][0]

(程式碼來自《機器學習實戰 Peter Harrington》)