1.概述
聚類是一種無監督學習,它將相似的對象歸到同一個簇中。聚類方法幾乎可以應用於所有對象,簇內的對象越相似,聚類的效果越好。
k-均值聚類之所以稱爲是因爲它可以發現k個不同的簇,且每個簇的中心採用簇中所含值的均值計算而成。
2.簇識別(cluster identification)
簇識別給出聚類結果的含義。假定有一些數據,現在將相似數據歸到一起,簇識別會告訴我們這些簇到底都是些什麼。聚類和分類的最大不同在於,分類的目標事先已知,而聚類則不一樣。因爲其產生的結果魚分類相同,而只是類別沒有預先定義,聚類有時也被稱爲無監督分類。
3.K-均值聚類
優點:容易實現
缺點:可能收斂到局部最小值,在大規模數據集上收斂較慢。
適用數據類型:數值型數據。
K-均值是發現給定數據集的k個簇的算法。簇的個數k是用戶給定的,每個簇通過其質心,即簇中所有點的中心來描述。
算法的流程:首先,隨機確定K個初始點作爲質心。然後,將數據集中的每個點分配到一個簇中,具體來講,爲每個點找距其最近的質心,並將其分配給該質心所對應的簇。這一步完成之後,每個簇的質心更新爲該簇所有點的平均值。
僞代碼:
一般流程:
5.使用後處理來提高聚類性能
k由用戶預先定義,那麼用戶如何才能知道k的選擇是否正確?如何才能知道生成的簇比較無好呢?
在包含簇分配結果的矩陣中保存着每個點的誤差,即該點到簇質心的距離平方值。
K均值算法收斂但是聚類效果較差的原因是,k均值算法收斂到了局部最小值,而非全局最小值。
一種度量聚類效果的指標是SSE(sum of squared error,誤差平方和)。SSE值越小表示數據點越接近於它們的質心,聚類的效果也越好。因爲對誤差取了平方,因此更加重視那些遠離中心的點。
對生成的簇進行後處理,一種方法是將具有最大SSE值的簇劃分成兩個簇。具體實現時可以將最大簇包含的點過濾出來並在這些點上運行K均值算法(k設爲2)。
爲了保持簇的總數不變,可以將兩個簇進行合併。有兩種可以量化的方法:合併最近的質心,或者合併兩個使得SSE增幅最小的質心。
6.二分K-均值算法
爲克服K-均值算法收斂於局部最小值的問題,有人提出了另一個稱爲二分K-均值(bisecting K-means)的算法。
該算法首先將所有點作爲一個簇,然後將該簇一分爲二。之後選擇其中一個簇繼續進行劃分,選擇哪一個簇進行劃分取決於對其劃分是否可以最大程度降低SSE的值。上述基於SSE的劃分過程不斷重複,直到得到用戶指定的簇數目爲止。
僞代碼:
7.小結
k-均值算法非常有效但是也容易受到初始簇質心的影響。爲了獲得更好的聚類效果,可以使用另一種稱爲二分k均值的聚類算法。
K-均值算法以及變形的k-均值算法並非僅有的聚類算法,另外稱爲層次聚類的算法也被廣泛使用。