K-近鄰算法
K-K個
N-nearest-最近
N-Neighbor
來源:KNN算法最早是由Cover和Hart提出的一種分類算法
定義
如果一個樣本在特征空間中的k個最相似(即特征空間中最鄰近)的樣本中的大多數屬於某一個類別,則該樣本也屬於這個類別。
距離公式
兩個樣本的距離可以通過如下公式計算,又叫歐式距離
KNN算法流程總結
根據K個鄰居判定你的類別
1.計算當前樣本與所有樣本距離
2.距離從小到大排序
3.取前K個鄰居
4.K個鄰居投票,統計投票結果(A,B)
5.根據投票結果值出現頻率高類別作為最終類別
K近鄰算法api初步使用
機器學習流程
1.獲取數據
2.數據基本處理
3.特征工程
4.建立模型
1.KNN算法
5.模型評估
Scikit-learn工具介紹
Python語言的機器學習工具
Scikit-learn包括許多知名的機器學習算法的實現
Scikit-learn文檔完善,容易上手,豐富的API
目前穩定版本0.19.1-??
安裝:
pip3 install scikit-learn==0.19.1
注:安裝scikit-learn需要Numpy, Scipy等庫
Scikit-learn 包含的內容
分類、聚類、回歸
特征工程
模型選擇、調優
K-近鄰算法API
- sklearn.neighbors.KNeighborsClassifier(n_neighbors=5)
- n_neighbors:int,可選(默認= 5),k_neighbors查詢默認使用的鄰居數
案例
- 實例化
- 執行訓練
- 預測
步驟分析
- 1.獲取數據集
- 2.數據基本處理(該案例中省略)
- 3.特征工程(該案例中省略)
- 4.機器學習
- 5.模型評估(該案例中省略)
代碼過程
- 導入模塊
from sklearn.neighbors import KNeighborsClassifier
- 構造數據集
x = [[0], [1], [2], [3]] y = [0, 0, 1, 1]
- 機器學習 -- 模型訓練
# 實例化API estimator = KNeighborsClassifier(n_neighbors=2) # 使用fit方法進行訓練 estimator.fit(x, y) estimator.predict([[1]])
Scikit-learn小結
- sklearn的優勢:
- 文檔多,且規范
- 包含的算法多
- 實現起來容易
- knn中的api
- sklearn.neighbors.KNeighborsClassifier(n_neighbors=5)
距離度量
歐氏距離
曼哈頓距離
每個維度的差值的絕對值的和
切比雪夫距離
每個維度差值絕對值的最大值
閔可夫斯基距離
閔氏距離不是一種距離,而是一組距離的定義,是對多個距離度量公式的概括性的表述。
兩個n維變量a(x11,x12,…,x1n)與b(x21,x22,…,x2n)間的閔可夫斯基距離定義為:
其中p是一個變參數:
當p=1時,就是曼哈頓距離;
當p=2時,就是歐氏距離;
當p→∞時,就是切比雪夫距離。
根據p的不同,閔氏距離可以表示某一類/種的距離。
小結:
1 閔氏距離,包括曼哈頓距離、歐氏距離和切比雪夫距離都存在明顯的缺點:
e.g. 二維樣本(身高[單位:cm],體重[單位:kg]),現有三個樣本:a(180,50),b(190,50),c(180,60)。
a與b的閔氏距離(無論是曼哈頓距離、歐氏距離或切比雪夫距離)等於a與c的閔氏距離。但實際上身高的10cm並不能和體重的10kg划等號。
2 閔氏距離的缺點:
(1)將各個分量的量綱(scale),也就是“單位”相同的看待了;
(2)未考慮各個分量的分布(期望,方差等)可能是不同的。
標准化歐氏距離
余弦距離
cos [-1,1] 鄰邊比斜邊
兩個量方向差距,趨向1關系比較大
漢明距離
傑卡德距離
傑卡德系數
馬氏距離
小結
- 1.歐式距離(Euclidean Distance)【知道】:
- 通過距離平方值進行計算
- 2.曼哈頓距離(Manhattan Distance)【知道】:
- 通過距離的絕對值進行計算
- 3.切比雪夫距離 (Chebyshev Distance)【知道】:
- 維度的最大值進行計算
- 4.閔可夫斯基距離(Minkowski Distance)【知道】:
- 當p=1時,就是曼哈頓距離;
- 當p=2時,就是歐氏距離;
- 當p→∞時,就是切比雪夫距離。
- 前四個距離公式小結:前面四個距離公式都是把單位相同看待了,所以計算過程不是很科學
- 5.標准化歐氏距離 (Standardized EuclideanDistance)【知道】:
- 在計算過程中添加了標准差,對量剛數據進行處理
- 6.余弦距離(Cosine Distance)【知道】:
- 通過cos思想完成
- 7.漢明距離(Hamming Distance)【了解】:
- 一個字符串到另一個字符串需要變換幾個字母,進行統計
- 8.傑卡德距離(Jaccard Distance)【了解】:
- 通過交並集進行統計
- 9.馬氏距離(Mahalanobis Distance)【了解】
- 通過樣本分布進行計算
K值的選擇(KNN中)
K值選擇問題,李航博士的一書「統計學習方法」上所說:
1) 選擇較小的K值,就相當於用較小的領域中的訓練實例進行預測,“學習”近似誤差會減小,只有與輸入實例較近或相似的訓練實例才會對預測結果起作用,與此同時帶來的問題是“學習”的估計誤差會增大,換句話說,K值的減小就意味着整體模型變得復雜,容易發生過擬合;
2) 選擇較大的K值,就相當於用較大領域中的訓練實例進行預測,其優點是可以減少學習的估計誤差,但缺點是學習的近似誤差會增大。這時候,與輸入實例較遠(不相似的)訓練實例也會對預測器作用,使預測發生錯誤,且K值的增大就意味着整體的模型變得簡單。
3) K=N(N為訓練樣本個數),則完全不足取,因為此時無論輸入實例是什么,都只是簡單的預測它屬於在訓練實例中最多的類,模型過於簡單,忽略了訓練實例中大量有用信息。
在實際應用中,K值一般取一個比較小的數值,例如采用交叉驗證法(簡單來說,就是把訓練數據在分成兩組:訓練集和驗證集)來選擇最優的K值。
- 近似誤差:
- 對現有訓練集的訓練誤差,關注訓練集,
- 如果近似誤差過小可能會出現過擬合的現象,對現有的訓練集能有很好的預測,但是對未知的測試樣本將會出現較大偏差的預測。
- 模型本身不是最接近最佳模型。
- 估計誤差:
- 可以理解為對測試集的測試誤差,關注測試集,
- 估計誤差小說明對未知數據的預測能力好,
- 模型本身最接近最佳模型。
總結:
-
K值過小:
容易受到異常點的影響
容易過擬合
-
K值過大:
受到樣本均衡問題的影響
容易欠擬合