機器學習筆記(一)k-NN演算法
阿新 • • 發佈:2019-01-23
簡單地說,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》)