K-近鄰算法(KNN)


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. 預測

步驟分析

  • 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值過大:

    受到樣本均衡問題的影響

    容易欠擬合

    

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM