天天看點

學習筆記——Canopy + K-means的聚類算法聚類和分類K-means算法Canopy算法思路小結參考文獻

學習筆記——Canopy + K-means的聚類算法聚類和分類K-means算法Canopy算法思路小結參考文獻

聚類和分類

聚類

聚類算法是将一系列文檔聚團成多個子集或簇,聚類的結果是要求簇内的文檔之間要盡可能相似,而簇間的文檔要盡可能不相似。
聚類是無監督學習的一種最普遍的形式,無監督意味着不存在對文檔進行類别标注。

分類

分類是監督學習的一種形式,其目标是對人類賦予資料的類别差異進行學習或複制。
而在以聚類為代表的無監督學習中,并沒有這樣的人來對類别的差異進行引導。

K-means算法

K-均值算法是最重要的扁平聚類算法,它的目标是最小化文檔到其簇中心的歐氏距離平方的平均值。

步驟

1、随機選取k個初始質心
2、計算所有點離質心的距離,将每個點劃分到最近的質心中成為聚類
3、計算每個聚類的平均值,并作為新的質心
4、重複2-3,直到這k個質心不再變化(收斂了),或執行了足夠多的疊代

示例

聲明:以下标号并不是順序标号,而是對應上文的步驟标号,這樣方了解。

首先我標明了這6個點作為示範
學習筆記——Canopy + K-means的聚類算法聚類和分類K-means算法Canopy算法思路小結參考文獻
他們在坐标上的分布如下圖
學習筆記——Canopy + K-means的聚類算法聚類和分類K-means算法Canopy算法思路小結參考文獻
1、選取P1、P2作為初始質心(當然其他的也可以)
學習筆記——Canopy + K-means的聚類算法聚類和分類K-means算法Canopy算法思路小結參考文獻
學習筆記——Canopy + K-means的聚類算法聚類和分類K-means算法Canopy算法思路小結參考文獻
2、算出每個點距離初始質心的距離,選擇離他最近的初始質心成為一個類
學習筆記——Canopy + K-means的聚類算法聚類和分類K-means算法Canopy算法思路小結參考文獻
學習筆記——Canopy + K-means的聚類算法聚類和分類K-means算法Canopy算法思路小結參考文獻
一類:P1
二類:P2、P3、P4、P5、P6
3、重新計算新的質心(這個質心可以是虛拟的,意思就是不是之前存在的點)
紅色标記為新的質心
學習筆記——Canopy + K-means的聚類算法聚類和分類K-means算法Canopy算法思路小結參考文獻
學習筆記——Canopy + K-means的聚類算法聚類和分類K-means算法Canopy算法思路小結參考文獻
我們可以看到新的質心中P1還是之前存在的點,而點A是新生成的質心,并不是之前存在的點!!
一類:P1
二類:P2、P3、P4、P5、P6

質心還在變化,是以要繼續進行2、3步驟

2、算出每個點距離質心距離,選擇距離比較近的質心組成一個類
學習筆記——Canopy + K-means的聚類算法聚類和分類K-means算法Canopy算法思路小結參考文獻
學習筆記——Canopy + K-means的聚類算法聚類和分類K-means算法Canopy算法思路小結參考文獻
一類:P1、P2、P3
二類:P3、P4、P5
3、重新計算簇中的質心
學習筆記——Canopy + K-means的聚類算法聚類和分類K-means算法Canopy算法思路小結參考文獻
學習筆記——Canopy + K-means的聚類算法聚類和分類K-means算法Canopy算法思路小結參考文獻

質心還在變化,是以要繼續進行2、3步驟

2、算出每個點距離質心距離,選擇距離比較近的質心組成一個類
學習筆記——Canopy + K-means的聚類算法聚類和分類K-means算法Canopy算法思路小結參考文獻
學習筆記——Canopy + K-means的聚類算法聚類和分類K-means算法Canopy算法思路小結參考文獻
3、重新計算簇中的質心
學習筆記——Canopy + K-means的聚類算法聚類和分類K-means算法Canopy算法思路小結參考文獻
學習筆記——Canopy + K-means的聚類算法聚類和分類K-means算法Canopy算法思路小結參考文獻
4、這K個質心不再變化,聚類結束

問題

1、K如何制定?

手肘法、Canopy算法、與層次聚類結合、穩定性方法、系統演化方法...

2、初始質心如何選擇?

随機的選取初始中心、使用層次聚類技術、Canopy算法

以下具體講解Canopy算法,其他方法請參考參考文獻[1]

Canopy算法

什麼是Canopy算法?

與傳統的聚類算法(比如K-means)不同,Canopy聚類最大的特點是不需要事先指定k值(即clustering的個數),是以具有很大的實際應用價值。與其他聚類算法相比,Canopy聚類雖然精度較低,但其在速度上有很大優勢,是以可以使用Canopy聚類先對資料進行“粗”聚類,得到k值,以及大緻的K個初始質心,再使用K-means進行進一步“細”聚類。是以Canopy+K-means這種形式聚類算法聚類效果良好。

步驟

我們假設每個資料用小圓點來表示。在計算機中用 List 集合存儲。 Canopy 算法首先選擇兩個距離門檻值:T1 和 T2,其中 T1 > T2
(1)原始狀态下的資料還沒有分類,是以從集合中取出一點 P,将 P 作為第一個類, 我們也将這個類稱為 Canopy。
學習筆記——Canopy + K-means的聚類算法聚類和分類K-means算法Canopy算法思路小結參考文獻
(2)繼續從集合中取點,比如R,計算R到已經産生的所有Canopy的距離,如果到某個Canopy的距離小于T1,則将R加入到該Canopy;如果R到所有Canopy中心的距離都大于T1,則将R作為一個新Canopy,如下圖中的Q就是一個新的Canopy。
學習筆記——Canopy + K-means的聚類算法聚類和分類K-means算法Canopy算法思路小結參考文獻
(3)如果P到該Canopy距離小于T2,則表示P和該Canopy已經足夠近,此時将P從從集合中删除,避免重複加入到其他Canopy。
(4)對集合中的點繼續執行上述操作直到集合為空,算法結束,聚類完成。

以上内容搬運來源水印(參考文獻[2])

以下為我個人對此算法的看法:

個人拙見,如有錯誤還請不吝賜教。

在我對這個算法進行學習的過程時,通過查閱資料我沒有找到關于T1、T2的确定方法,是以在這方面我個人存有疑問,是以我個人采用的是如下方法:

(1)首先我們确定一個T(取值方法下面會給出)。

(2)原始狀态下的資料還沒有分類,是以從集合中取出一點P,将P作為第一個類,我們也将類稱為Canopy。

(3)繼續從集合中取點,比如R,計算R到已經産生的所有Canopy的距離,如果到某個Canopy的距離小于T,則把該點從清單中删除;如果R到所有Canopy中心的距離都大于T,則将R從清單中取出作為一個新Canopy。

(4)對集合中的點繼續執行上述操作直到集合為空,算法結束,聚類完成。

在我的方法中我僅僅使用了一個T,這個T的作用相當于上文方法中的T2,因為上文所說的方法中T1并沒有起到什麼作用。盡管如果有的點到質心的距離小于T1,那這個點不會從清單中删除。而循環終止的條件為清單中元素為空,是以我隻用了一個T,如果距離小于T則直接把這個點劃分為這個類中,把這個點從清單中删除。如果這個點大于T,則直接把這個點從清單中取出來當做質心建立一個新的類。

T的取值

學習筆記——Canopy + K-means的聚類算法聚類和分類K-means算法Canopy算法思路小結參考文獻

以這三個點為例:

對點P1

d(P1-P2)=2
d(P1-P3)=1.414213   
平均值(ave1)= 1.7071065
           

對點P2

d(P2-P1)=2
d(P2-P3)=1.414213
平均值(ave2)= 1.7071065
           

對點P3

d(P3-P1)= 1.414213
d(P3-P2)= 1.414213
平均值(ave3)= 1.414213
           

是以T=(ave1+ave2+ave3)/3 = 1.6094753333

思路小結

學習筆記——Canopy + K-means的聚類算法聚類和分類K-means算法Canopy算法思路小結參考文獻

參考文獻

[1]從零開始實作Kmeans聚類算法:https://blog.csdn.net/u013719780/article/details/78413770

[2]Canopy聚類算法過程:https://blog.csdn.net/u011514201/article/details/53510069

[3]劃分方法聚類(三) Canopy+K-MEANS 算法解析:https://blog.csdn.net/wojiaosusu/article/details/57072499

[4]Mahout之聚類Canopy分析:https://blog.csdn.net/yclzh0522/article/details/6839643

繼續閱讀