使用 numpy 庫,只需 10 行簡單的代碼就能實現(xiàn) k 近鄰算法冀值。
算法邏輯
對要分類的點(X)進(jìn)行下列運算:
- 計算 X 與已知分類的所有點的距離(歐氏距離)桶蝎;
- 距離按照遞增排序政敢;
- 選取距離最小的 k 個點;
- 計算這 k 個點中买窟,每個分類出現(xiàn)的頻率;
- 取頻率最高的分類為預(yù)測分類薯定。
代碼實現(xiàn)
def kNN(X, dataset, labels, k):
# 計算X與所有其他點的差值
diff = np.tile(X, (dataset.shape[0], 1)) - dataset
# 計算歐氏距離
distances = ((diff**2).sum(axis=1))**0.5
# 排序
sorted_idx = distances.argsort()
class_cnt = {}
for i in range(k):
label = labels[sorted_idx[i]]
class_cnt[label] =class_cnt.get(label, 0) + 1
# 找出頻率最高的分類作為預(yù)測結(jié)果
sorted_class = sorted(class_cnt.iteritems(), key=operator.itemgetter(1), reverse=True)
return sorted_class[0][0]
enjoy始绍!