K均值演算法

便便飛翔發表於2017-08-16

K均值屬於比較簡單的聚類問題,所謂的聚類問題,就是給定一個元素集合D,其中每個元素具有n個可觀察屬性,使用某種演算法將D分成K個子集,要求每個子集內部的元素之間的相異度儘可能的小,而不同子集的元素相異度儘可能的大。其中每一個子集叫做一個簇。

傳統K均值的計算過程:

1.從D中隨機取K個元素,作為K個簇的各自的中心。

2.計算剩下的元素到各個中心點的相異度(一般按照歐式距離的遠近),將這些元素歸納到相異度最低的簇。

3.根據聚類結果,重新計算K個簇各自的中心,計算方法是取簇中所有元素各自維度的算數平均數(一般為簇內所有元素點到簇中心的距離和的平均數)。

4.將D中所有的元素按照新的中心重新聚類。

5.重複第4步,直到聚類結果不再變化。

6.將結果輸出。

K-Means++演算法

K-Means主要有兩個最重大的缺陷------都和初始值有關:

(1)K是事先給定的,這個K值的選定是非常難以估計的。很多時候,事先並不知道給定的資料集應該分成多少個類別才最合適。

(2)K-Means演算法需要用初始隨機種子點來搞,這個隨機種子點太重要,不同的隨機種子點會有得到完全不同的結果。

K-Means++演算法步驟:

1.先從資料集D中隨機挑選一個點當“種子點”。

2.對於每個點,我們都計算其和最近的一個“種子點”的距離D(x)並儲存在一個陣列裡,然後把這些距離加起來得到Sum(D(x))。

3,然後,再取一個隨機值,用權重的方式來取計算下一個“種子點”。這個演算法的實現是,先取一個能落在Sum(D(x))中的隨機值Random,然後用Random-=D(x),直到其《=0,此時的點就是下一個“種子點”。

4.重複第2,3步直到所有的K個種子點都被選出來。

5.進行K-Means演算法。

關於K值選取的問題:

聚類數的確定沒有個確切的方法。

K值可以先用系統聚類法,看譜系圖然後得出大致分幾類。然後多試幾個K值,確定個最好的。

系統聚類法見連結:http://www.cnblogs.com/yangmier/archive/2012/04/09/2438447.html

相關文章