在上一篇中我們對k-means算法進行了簡單地介紹,明確了k-means算法的優缺點,本章我們將介紹k-means算法的改進版本——k-means++算法,該算法是爲解決k-means分類結果會受到初始點的選取而存在區別而提出的。
k-means++算法僅對k-means算法的初始點選擇部分進行改進,改進後算法的初始質心選擇思路爲:
- 初始聚類中心之間的相互距離要儘可能的遠;
- 假設已經選取了n個初始聚類中心(n < k),則在選取第 n+1 個聚類中心時,距離當前 n 個聚類中心越遠的點會有更高的概率被選爲第 n+1 個聚類中心
k-means++算法的步驟如下:
- 隨機選擇一個樣本作爲第一個聚類中心 c1;
- 計算每個樣本與當前已有聚類中心的最短距離(即與最近一個聚類中心的距離),用 D(x)表示,這個值越大,表示被選取作爲聚類中心的概率就越大;
k-means聚類算法的兩個難點:
- 確定 k 值得大小
k 值的確定
樣本聚類誤差平方和,核心指標是SSE(Sum of the squared errors, 誤差平方和)
其中,K是聚類數量,p是樣本, 是第 k 個聚類的中心點,K越大,SSE越小,說明樣本聚合程度越高。
當 k小於真實聚類數時,由於 k 的增大會大幅度增加每個簇的聚類程度,故SSE的下降幅度會增大,而當 k 到達真實聚類數時,再增加 k 所得到的聚類程度回報會迅速變小,所以 SSE 的下降幅度會驟減,然後隨着 k 值得繼續增大而趨於平緩,這個最先趨於平緩的點就是合適的 K 值。
2. 如何選擇 k 個初始聚類中心
初始類簇中心點的確定
(1)選擇批次距離儘可能遠的 k 個點
首先,隨機選擇一個點作爲第一個類簇中心點,然後選擇距離該點最遠的那個點作爲第二個初始類簇中心點,再選擇距離前兩個點的最近距離最大的點作爲第三個初始類簇的中心點,以此類推,直至選出 k 個初始類簇中心點。
(2)選用層次聚類或者Canopy算法進行初始聚類,然後利用這些類簇的中心點作爲 k-means算法初始類簇中心點
參考: