K-Means 聚類方法
對象
- 與有監督學習不同的是,無監督學習所面向的數據是沒有標籤的。
- 那麼如果給定一個無標籤的數據集,怎麼對其進行分類呢,這時就要使用聚類方法
- K-means 就是聚類方法的一種
K-means 的流程:
k-means 是一個迭代算法,可以按以下步驟記憶
- 按照給定的K值產生K個不同的聚類中心
- 數據點與K個聚類中心進行距離上的計算,每個數據點選擇其本身距離最近的聚類中心的類作爲本輪的歸屬
- 按照新的數據分佈,分別計算各類數據的均值來作爲新的聚類中心
- 不斷迭代2,3步驟,直到聚類中心不再進行變化算法結束
注意:如果分類的過程中發生某類簇中沒有數據點的情況,就將那個簇刪除掉;若對簇的數量有要求,就重新進行聚類中心的初始化。
失真函數
從數學角度來看,K-means算法是基於上式的損失函數來優化求解的。
- 是第i個數據點的分類
- 是聚類中心
- 代表的是某輪迭代時,數據點x的分類的聚類中心
而K-means的兩個迭代流程可以分別看作,失真函數J對於c和u做拉格朗日乘子法得到的最值解。
比如在簇分配時,就是固定u變量,計算所有x到u的距離,通過此方法來優化c
而在更新聚類中心時,就是固定c變量,並利用c來重新計算新的聚類中心。
聚類中心的初始化
在算法的第一步就是初始化聚類中心的位置,這裏應用了一個較好的方法,就是在所有的數據點裏隨機化選擇k個(不放回抽取)點作爲初始的聚類中心,依據此來開始算法的迭代
但是這種隨機化分配的變化性較強,就使得聚類的結果會出現問題,產生局部最優解
此時對應的解決辦法就是,多次(比如100次)隨機化初始聚類中心,然後進行聚類的分配,並計算每次最終的分類對應的失真函數的值,選擇最小的一次作爲最終的分類結果。這種方法對K在2到10之間的聚類問題很有效果,當類的數量太多的時候,這種方法的作用就不會那麼明顯了。
K的選擇
通常來講,K的選擇是經過人的思考或經驗決定的,它通常取決於要解決的問題或要達到的目的,因此並不存在一種自動的最優的k的選擇方法
若不知道K應該取多少,可以通過”肘部法則“來進行嘗試,但往往並不會取得太好的效果。