KMeans演算法的K值以及初始類簇中心點的選取

2021-09-30 12:54:04 字數 2557 閱讀 7043

kmeans演算法是最常用的聚類演算法,主要思想是:在給定k值和k個初始類簇中心點的情況下,把每個點(亦即資料記錄)分到離其最近的類簇中心點所代表的類簇中,所有點分配完畢之後,根據乙個類簇內的所有點重新計算該類簇的中心點(取平均值),然後再迭代的進行分配點和更新類簇中心點的步驟,直至類簇中心點的變化很小,或者達到指定的迭代次數。

kmeans演算法本身思想比較簡單,但是合理的確定k值和k個初始類簇中心點對於聚類效果的好壞有很大的影響。

1. 確定k個初始類簇中心點

最簡單的確定初始類簇中心點的方法是隨機選擇k個點作為初始的類簇中心點,但是該方法在有些情況下的效果較差,如下(下圖中的資料是用五個二元正態高斯分布生成的,顏色代表聚類效果):

《大資料》一書中提到k個初始類簇點的選取還有兩種方法:1)選擇彼此距離盡可能遠的k個點 2)先對資料用層次聚類演算法或者canopy演算法進行聚類,得到k個簇之後,從每個類簇中選擇乙個點,該點可以是該類簇的中心點,或者是距離類簇中心點最近的那個點。

1) 選擇批次距離盡可能遠的k個點

首先隨機選擇乙個點作為第乙個初始類簇中心點,然後選擇距離該點最遠的那個點作為第二個初始類簇中心點,然後再選擇距離前兩個點的最近距離最大的點作為第三個初始類簇的中心點,以此類推,直至選出k個初始類簇中心點。

該方法經過我測試效果很好,用該方法確定初始類簇點之後執行kmeans得到的結果全部都能完美區分五個類簇:

2) 選用層次聚類或者canopy演算法進行初始聚類,然後利用這些類簇的中心點作為kmeans演算法初始類簇中心點。

常用的層次聚類演算法有birch和rock,在此不作介紹,下面簡單介紹一下canopy演算法,主要摘自mahout的wiki:

首先定義兩個距離t1和t2,t1>t2.從初始的點的集合s中隨機移除乙個點p,然後對於還在s中的每個點i,計算該點i與點p的距離,如果距離小於t1,則將點i加入到點p所代表的canopy中,如果距離小於t2,則將點i從集合s中移除,並將點i加入到點p所代表的canopy中。迭代完一次之後,重新從集合s中隨機選擇乙個點作為新的點p,然後重複執行以上步驟。

canopy演算法執行完畢後會得到很多canopy,可以認為每個canopy都是乙個cluster,與kmeans等硬劃分演算法不同,canopy的聚類結果中每個點有可能屬於多個canopy。我們可以選擇距離每個canopy的中心點最近的那個資料點,或者直接選擇每個canopy的中心點作為kmeans的初始k個類簇中心點。

2. k值的確定。

《大資料》中提到:給定乙個合適的類簇指標,比如平均半徑或直徑,只要我們假設的類簇的數目等於或者高於真實的類簇的數目時,該指標上公升會很緩慢,而一旦試圖得到少於真實數目的類簇時,該指標會急劇上公升。

類簇的直徑是指類簇內任意兩點之間的最大距離。

類簇的半徑是指類簇內所有點到類簇中心距離的最大值。

下圖是當k的取值從2到9時,聚類效果和類簇指標的效果圖:

左圖是k取值從2到7時的聚類效果,右圖是k取值從2到9時的類簇指標的變化曲線,此處我選擇類簇指標是k個類簇的平均質心距離的加權平均值。從上圖中可以明顯看到,當k取值5時,類簇指標的下降趨勢最快,所以k的正確取值應該是5.為以下是具體資料:

2 個聚類

所有類簇的半徑的加權平均值 8.51916676443

所有類簇的平均質心距離的加權平均值 4.82716260322

3 個聚類

所有類簇的半徑的加權平均值 7.58444829472

所有類簇的平均質心距離的加權平均值 3.37661824845

4 個聚類

所有類簇的半徑的加權平均值 5.65489660064

所有類簇的平均質心距離的加權平均值 2.22135360453

5 個聚類

所有類簇的半徑的加權平均值 3.67478798553

所有類簇的平均質心距離的加權平均值 1.25657641195

6 個聚類

所有類簇的半徑的加權平均值 3.44686996398

所有類簇的平均質心距離的加權平均值 1.20944264145

7 個聚類

所有類簇的半徑的加權平均值 3.3036641135

所有類簇的平均質心距離的加權平均值 1.16653919186

8 個聚類

所有類簇的半徑的加權平均值 3.30268530308

所有類簇的平均質心距離的加權平均值 1.11361639906

9 個聚類

所有類簇的半徑的加權平均值 3.17924400582

所有類簇的平均質心距離的加權平均值 1.07431888569

出處:

K means中K值的選擇

kmeans是最簡單的聚類演算法之一,但是運用十分廣泛。最近在工作中也經常遇到這個演算法。kmeans一般在資料分析前期使用,選取適當的k,將資料分類後,然後分類研究不同聚類下資料的特點。kmeans的計算方法如下 1.隨機選取k個中心點 2.遍歷所有資料,將每個資料劃分到最近的中心點中 3.計算每...

K均值演算法(K means)

k均值聚類容易實現,但是可能收斂到區域性最小值,影響k means效果的因素 優 只需要計算資料點與聚類中心的距離,其計算複雜度只有o n 缺 十分依賴於初始給定的聚類數目 同時隨機初始化可能會生成不同的聚類效果,所以它缺乏重複性和連續性。偽 建立k個點作為起始質心 通常是隨機選擇 當任意乙個點的簇...

如何選擇K Means中K的值

k means需要設定乙個簇心個數的引數,現實中,最常用於確定k數的方法,其實還是人手工設定。例如,當我們決定將衣服做成幾個碼的時候,其實就是在以 人的衣服的長和寬為為特徵進行聚類。所以,弄清楚我們更在意的是什麼,能夠 引導選擇更合適的k值。有種方法能自動決定k值,也就是所謂的elbow metho...