kmeans python自定义初始聚类中心_机器学习-KMeans聚类 K值以及初始类簇中心点的选取...
本文主要基于Anand Rajaraman和Jeffrey David Ullman合著,王斌翻譯的《大數據-互聯網大規模數據挖掘與分布式處理》一書。
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.為以下是具體數據:
1 2個聚類2 所有類簇的半徑的加權平均值 8.51916676443
3 所有類簇的平均質心距離的加權平均值 4.82716260322
4 3個聚類5 所有類簇的半徑的加權平均值 7.58444829472
6 所有類簇的平均質心距離的加權平均值 3.37661824845
7 4個聚類8 所有類簇的半徑的加權平均值 5.65489660064
9 所有類簇的平均質心距離的加權平均值 2.22135360453
10 5個聚類11 所有類簇的半徑的加權平均值 3.67478798553
12 所有類簇的平均質心距離的加權平均值 1.25657641195
13 6個聚類14 所有類簇的半徑的加權平均值 3.44686996398
15 所有類簇的平均質心距離的加權平均值 1.20944264145
16 7個聚類17 所有類簇的半徑的加權平均值 3.3036641135
18 所有類簇的平均質心距離的加權平均值 1.16653919186
19 8個聚類20 所有類簇的半徑的加權平均值 3.30268530308
21 所有類簇的平均質心距離的加權平均值 1.11361639906
22 9個聚類23 所有類簇的半徑的加權平均值 3.17924400582
24 所有類簇的平均質心距離的加權平均值 1.07431888569
參考文獻:
[1] 《大數據-互聯網大規模數據挖掘與分布式處理》 Anand Rajaraman,Jeffrey David Ullman著,王斌譯。
總結
以上是生活随笔為你收集整理的kmeans python自定义初始聚类中心_机器学习-KMeans聚类 K值以及初始类簇中心点的选取...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux入门_linux入门-常用命令
- 下一篇: 树莓派 小屏幕_树莓派学习手动积累(1)