1. 程式人生 > >聚類演算法:KMEANS原理介紹

聚類演算法:KMEANS原理介紹

聚類演算法:KMEANS原理介紹

  • 聚類介紹

聚類分析是一個無監督學習過程,一般是用來對資料物件按照其特徵屬性進行分組,經常被應用在客戶分群、欺詐檢測、影象分析等領域。K-means應該是最有名並且最經常使用的聚類演算法。

  • 演算法介紹

   KMeans演算法的基本思想是初始隨機給定K個簇中心,按照最鄰近原則把待分類樣本點分到各個簇,然後按照平均法重新計算各個簇的質心,從而確定簇心,一直迭代,知道簇心的移動距離小於某個給定的值。

   K-means 演算法是一個迭代式的演算法,其運算過程如下:

  1. 選擇k個點作為初始聚類中心。(k需要我們程式自己設定)
  2. 計算其餘所有點到聚類中心的距離,並把每個點劃分到離它最近的聚類中心所在的聚類中。最常用的衡量距離的函式式歐幾里得距離,叫做歐式距離。
  3. 重新計算每個聚類中所有點的平均值,並將其作為新的聚類中心點。
  4. 重複2,3步的過程,直至聚類中心不再發生變化,或者演算法達到預定的迭代次數(程式自己設定),又或者聚類中心的改變小於預定設定的閥值。

舉個例子介紹:

從上圖中,我們可以看到,A,B,C,D,E是五個在圖中點。而灰色的點是我們的種子點,也就是我們用來找點群的點。有兩個種子點,所以K=2。

K-Means的演算法如下:

1、隨機在圖中取K(這裡K=2)個種子點。

2、然後對圖中的所有點求到這K個種子點的距離,假如點Pi離種子點Si最近,那麼Pi屬於Si點群。(上圖

   中,我們可以看到A,B屬於上面的種子點,C,D,E屬於下面中部的種子點)

3、接下來,我們要移動種子點到屬於他的“點群”的中心。(見圖上的第三步)

4、然後重複第2)和第3)步,直到,種子點沒有移動(我們可以看到圖中的第四步上面的種子點聚合了A,      

   B,C,下面的種子點聚合了D,E)。

  • KMeans兩個重要問題
  1. 選擇K值

K 的選擇是 K-means 演算法的關鍵,Spark MLlib 在 KMeansModel 類裡提供了 computeCost 方法,該方法通過計算所有資料點到其最近的中心點的平方和來評估聚類的效果。一般來說,同樣的迭代次數和演算法跑的次數,這個值越小代表聚類的效果越好。但是在實際情況下,我們還要考慮到聚類結果的可解釋性,不能一味的選擇使 computeCost 結果值最小的那個 K。

  1. 初始聚類中心點的選擇

對於初始化聚類中心點,我們可以在輸入的資料集中隨機地選擇K個點作為中心點,但是隨機選擇初始中心點可能會造成聚類的結果和資料的實際分佈相差很大。所以我們一般選擇k-means++演算法去初始化中心點。

k-means++演算法選擇初始中心點的基本思想就是:初始的聚類中心之間的相互距離要儘可能遠。

  1. 從輸入的資料點集合中隨機選擇一個點作為第一個初始點。
  2. 計算資料集中所有點與最新選擇的中心點的距離D(x).
  3. 選擇下一個中心點,使得最大。
  4. 重複2,3步過程,直到K個初始點選擇完成。