《機器學習實戰》學習總結1——K-近鄰演算法(程式清單2-1)
阿新 • • 發佈:2018-12-19
程式碼如下:
def classify0(inX, dataSet, labels, k): # inX是用於分類的輸入向量,dataSet是輸入的訓練樣本集,lebels是標籤向量,k是用於選擇最近鄰居的數目 dataSetSize = dataSet.shape[0] # 訓練樣本個數 , 有多少行資料 shape反回一個元組。(行, 列) diffMat = np.tile(inX, (dataSetSize, 1)) - dataSet # tile(inX, (dataSetSize,1)) 建立一個numpy的array,dataSetSize行,每行資料是inX sqDiffMat = diffMat**2# 矩陣的每個值平方 sqDistances = sqDiffMat.sum(axis=1) distances = sqDistances**0.5 # distance是inX與dataSet的歐氏距離 sortedDistIndicies = distances.argsort() # 返回排序從小到達的索引位置 classCount = {} # 字典儲存k近鄰不同label出現的次數 for i in range(k): voteIlabel = labels[sortedDistIndicies[i]] classCount[voteIlabel] = classCount.get(voteIlabel, 0) + 1 # 對應label加1,classCount中若無此key,則預設為0 sortedClassCount = sorted(classCount.items(), key=operator.itemgetter(1), reverse=True) #reverse=True代表從大到小排序 #reverse=False或者預設代表從小到大排序 return sortedClassCount[0][0] # 返回k近鄰中所屬類別最多的哪一類