K-means 在 Python 中的實現

發表於2017-09-09

K-means演算法簡介

K-means是機器學習中一個比較常用的演算法,屬於無監督學習演算法,其常被用於資料的聚類,只需為它指定簇的數量即可自動將資料聚合到多類中,相同簇中的資料相似度較高,不同簇中資料相似度較低。

K-menas的優缺點:

優點:

  • 原理簡單
  • 速度快
  • 對大資料集有比較好的伸縮性

缺點:

  • 需要指定聚類 數量K
  • 對異常值敏感
  • 對初始值敏感

K-means的聚類過程

其聚類過程類似於梯度下降演算法,建立代價函式並通過迭代使得代價函式值越來越小

  1. 適當選擇c個類的初始中心;
  2. 在第k次迭代中,對任意一個樣本,求其到c箇中心的距離,將該樣本歸到距離最短的中心所在的類;
  3. 利用均值等方法更新該類的中心值;
  4. 對於所有的c個聚類中心,如果利用(2)(3)的迭代法更新後,值保持不變,則迭代結束,否則繼續迭代。

201104061601534923該演算法的最大優勢在於簡潔和快速。演算法的關鍵在於初始中心的選擇和距離公式。

K-means 例項展示

python中km的一些引數:

下面展示一個程式碼例子

為了更直觀的描述,這次在圖上做一個展示,由於影象上繪製二維比較直觀,所以資料調整到了二維,選取100個點繪製,聚類類別為3類

201708253474_6662

可以看到聚類效果還是不錯的,對k-means的聚類效率進行了一個測試,將維度擴寬到50維

資料規模 消耗時間 資料維度
10000條 4s 50維
100000條 30s 50維
1000000條 4’13s 50維

對於百萬級的資料,擬合時間還是能夠接受的,可見效率還是不錯,對模型的儲存與其它的機器學習演算法模型儲存類似

相關文章