1.原理
k-means是一種無監督的基於距離的聚類算法。在無監督的算法中,訓練集的標籤信息是不知道的,任務是通過對訓練樣本的學習來揭示數據的內在性質和規律。聚類是將訓練集中的樣本劃分爲若干個不想交的子集,每一個子集稱爲一個簇,這些簇都是不知道標籤信息的數據樣本,每一個樣本都包含着一個n維的特徵向量。
k-means聚類算法是將n個樣本的數據集x劃分爲k個簇,表示第i個簇的中心,k-means算法的目標就是,選擇k箇中心,使得類裏面各個樣本點到其中心的距離平方和最小。聚類完成後,通常計算最小化內類分散度來評價聚類效果,這個值在一定程度上刻畫了簇內樣本的緊密程度,值越小表示簇內樣本相似度越高。
最小化類內分散度公式:
其中,k表示有k個類簇,表示第i個簇,表示這個簇內的一個樣本,表示第i個簇的中心。
k-means聚類算法是使用最廣泛的算法之一,但是它也有一些缺點,比如選擇不同的初始聚類中心,最終聚類的結果可能不一樣,並且k-means算法容易受到異常點的影響,因爲它更新中心點的時候用的均值。
2.算法思路
(1)從輸入的樣本中隨機選擇一個樣本作爲第一個聚類中心(初始的聚類中心之間的相互距離應該儘可能大)
(2)計算每一個樣本到各個中心點的距離,選擇距離最小的中心點,把該樣本歸到該類別。
(3)當所有樣本都劃歸完了後,計算每一個簇的新中心點,也就是每個簇的均值,然後更新中心點。
(4)重複(2)(3)步,直到聚類中心不再變化位置。