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