機器學習中 K近鄰法(knn)與k-means的區別

簡介git

K近鄰法(knn)是一種基本的分類與迴歸方法。k-means是一種簡單而有效的聚類方法。雖然二者用途不一樣、解決的問題不一樣,可是在算法上有不少類似性,因而將兩者放在一塊兒,這樣可以更好地對比兩者的異同。github

算法描述

knn

算法思路:
若是一個樣本在特徵空間中的k個最類似(即特徵空間中最鄰近)的樣本中的大多數屬於某一個類別,則該樣本也屬於這個類別。算法

k近鄰模型的三個基本要素:測試

  1. k值的選擇:k值的選擇會對結果產生重大影響。較小的k值能夠減小近似偏差,可是會增長估計偏差;較大的k值能夠減少估計偏差,可是會增長近似偏差。通常而言,一般採用交叉驗證法來選取最優的k值。
  2. 距離度量:距離反映了特徵空間中兩個實例的類似程度。能夠採用歐氏距離、曼哈頓距離等。
  3. 分類決策規則:每每採用多數表決。

k-means

算法步驟:
1. 從n個數據中隨機選擇 k 個對象做爲初始聚類中心;
2. 根據每一個聚類對象的均值(中心對象),計算每一個數據點與這些中心對象的距離;並根據最小距離準則,從新對數據進行劃分;
3. 從新計算每一個有變化的聚類簇的均值,選擇與均值距離最小的數據做爲中心對象;
4. 循環步驟2和3,直到每一個聚類簇再也不發生變化爲止。url

k-means方法的基本要素:spa

    1. k值的選擇:也就是類別的肯定,與K近鄰中k值的肯定方法相似。
    2. 距離度量:能夠採用歐氏距離、曼哈頓距離等。

應用實例

問題描述

已知若干人的性別、身高和體重,給定身高和體重判斷性別。考慮使用k近鄰算法實現性別的分類,使用k-means實現性別的聚類。.net

數據

數據集合:https://github.com/shuaijiang/FemaleMaleDatabase3d

該數據集包含了訓練數據集和測試數據集,考慮在該數據集上利用k近鄰算法和k-means方法分別實現性別的分類和聚類。對象

將訓練數據展現到圖中,能夠更加直觀地觀察到數據樣本之間的聯繫和差別,以及不一樣性別之間的差別。blog


數據展現數據展現

KNN的分類結果

KNN算法中的基本設置

利用KNN算法,在測試集上的結果以下混淆矩陣表所示。從表中能夠看出,測試集中的男性所有分類正確,測試集中的女性有一個被錯誤分類,其餘都分類正確。

混淆矩陣 Test:male Test:female
Result:male 20 1
Result:female 0 14

(表注:Test:male、Test:female分別表示測試集中的男性和女性,Result:male和Result:female分別表示結果中的男性和女性。表格中第一個元素:即Test:male列、Result:male行,表示測試集中爲男性、而且結果中也爲男性的數目。表格中其餘元素所表明的含義以此類推)
由上表能夠計算分類的正確率:(20+14)/(20+14+1) = 97.14%

K-means的聚類結果

K-means算法的基本設置

混淆矩陣 Test:male Test:female
Result:male 20 1
Result:female 0 14

(表注:該表與上表內容一致)

因爲選擇初始中心點是隨機的,因此每次的聚類結果都不相同,最好的狀況下可以徹底聚類正確,最差的狀況下兩個聚類簇沒有分開,根據多數投票決定類別時,被標記爲同一個類別。

KNN VS K-means

兩者的相同點:
- k的選擇相似
- 思路相似:根據最近的樣原本判斷某個樣本的屬性

兩者的不一樣點:

  • 應用場景不一樣:前者是分類或者回歸問題,後者是聚類問題;
  • 算法複雜度: 前者O(n^2),後者O(kmn);(k是聚類類別數,m是聚類次數)
  • 穩定性:前者穩定,後者不穩定。

總結

本文歸納地描述了K近鄰算法和K-means算法,具體比較了兩者的算法步驟。在此基礎上,經過將兩種方法應用到實際問題中,更深刻地比較兩者的異同,以及各自的優劣。本文做者還分別實現了K近鄰算法和K-means算法,而且應用到了具體問題上,最後獲得告終果。以上內容不免有所紕漏和錯誤,歡迎指正。

相關文章
相關標籤/搜索