什麼是K近鄰算法?
K近鄰是最爲基礎的分類和迴歸算法!他的基本原則就是:對給定的訓練實例點和輸入實例點,首先確定輸入實例點的個最近鄰訓練實例點,然後利用這個訓練實例點的類的多數來預測輸入實例點的類。簡單的說就是近朱者赤,近墨者黑。該點周圍的K個點絕大部分是紅色的,那麼它是紅色的概率也大。如果絕大部分是黑色的,那麼它也極有可能是黑色的!
近鄰三要素
近鄰法三要素有:
-
距離度量
距離度量:就是用何種方式選擇個點:一般的方法就是用歐式距離 -
值的選擇
的選擇一般是採用交叉驗證來選擇,它的選擇反映出了近似誤差與估計誤差之間的權衡。 -
分類決策規則
分類決策通常爲多數表決,對應於經驗風險最小化。也就是少數服從多數。
key point
近鄰法的實現需要考慮如何快速搜索k個最近鄰點。對於一維變量來說,二叉樹是一個不錯的先擇。對於K維空間則使用kd樹(上一篇博客進行過介紹)
距離度量
設特徵空間是維實數向量空間 ,,, ,則:,的距離定義爲:
曼哈頓距離
歐氏距離
閔式距離
python實現距離度量
import math
from itertools import combinations
def L(x, y, p=2):
# x1 = [1, 1], x2 = [5,1]
if len(x) == len(y) and len(x) > 1:
sum = 0
for i in range(len(x)):
sum += math.pow(abs(x[i] - y[i]), p)
return math.pow(sum, 1 / p)
else:
return 0
scikit-learning 種的knn
from sklearn.neighbors import KNeighborsClassifier
clf_sk = KNeighborsClassifier()
clf_sk.fit(X_train, y_train)
clf_sk.score(X_test, y_test)
整體的流程
- 劃分好訓練集,測試集
- 設置好距離度量方法
- 選擇出測試點距離最近的K個點
- 對這K個點的標籤進行投票
- 獲得最終的決策