簡介git
K近鄰法(knn)是一種基本的分類與迴歸方法。k-means是一種簡單而有效的聚類方法。雖然二者用途不一樣、解決的問題不一樣,可是在算法上有不少類似性,因而將兩者放在一塊兒,這樣可以更好地對比兩者的異同。github
算法描述
knn
算法思路:
若是一個樣本在特徵空間中的k個最類似(即特徵空間中最鄰近)的樣本中的大多數屬於某一個類別,則該樣本也屬於這個類別。算法
k近鄰模型的三個基本要素:測試
- k值的選擇:k值的選擇會對結果產生重大影響。較小的k值能夠減小近似偏差,可是會增長估計偏差;較大的k值能夠減少估計偏差,可是會增長近似偏差。通常而言,一般採用交叉驗證法來選取最優的k值。
- 距離度量:距離反映了特徵空間中兩個實例的類似程度。能夠採用歐氏距離、曼哈頓距離等。
- 分類決策規則:每每採用多數表決。
k-means
算法步驟:
1. 從n個數據中隨機選擇 k 個對象做爲初始聚類中心;
2. 根據每一個聚類對象的均值(中心對象),計算每一個數據點與這些中心對象的距離;並根據最小距離準則,從新對數據進行劃分;
3. 從新計算每一個有變化的聚類簇的均值,選擇與均值距離最小的數據做爲中心對象;
4. 循環步驟2和3,直到每一個聚類簇再也不發生變化爲止。url
k-means方法的基本要素:spa
- k值的選擇:也就是類別的肯定,與K近鄰中k值的肯定方法相似。
- 距離度量:能夠採用歐氏距離、曼哈頓距離等。
應用實例
問題描述
已知若干人的性別、身高和體重,給定身高和體重判斷性別。考慮使用k近鄰算法實現性別的分類,使用k-means實現性別的聚類。.net
數據
數據集合:https://github.com/shuaijiang/FemaleMaleDatabase3d
該數據集包含了訓練數據集和測試數據集,考慮在該數據集上利用k近鄰算法和k-means方法分別實現性別的分類和聚類。對象
將訓練數據展現到圖中,能夠更加直觀地觀察到數據樣本之間的聯繫和差別,以及不一樣性別之間的差別。blog
KNN的分類結果
KNN算法中的基本設置
- k=5
- 距離度量:歐氏距離
- 分類決策規則:多數投票
- 測試集:https://github.com/shuaijiang/FemaleMaleDatabase/blob/master/test0.txt
利用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算法的基本設置
- k=2
- 距離度量:歐氏距離
- 最大聚類次數:200
- 類別決策規則:根據每一個聚類簇中的多數決定類別
- 測試集:https://github.com/shuaijiang/FemaleMaleDatabase/blob/master/test0.txt
混淆矩陣 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算法,而且應用到了具體問題上,最後獲得告終果。以上內容不免有所紕漏和錯誤,歡迎指正。