聚類和分類
聚類
聚類算法是将一系列文檔聚團成多個子集或簇,聚類的結果是要求簇内的文檔之間要盡可能相似,而簇間的文檔要盡可能不相似。
聚類是無監督學習的一種最普遍的形式,無監督意味着不存在對文檔進行類别标注。
分類
分類是監督學習的一種形式,其目标是對人類賦予資料的類别差異進行學習或複制。
而在以聚類為代表的無監督學習中,并沒有這樣的人來對類别的差異進行引導。
K-means算法
K-均值算法是最重要的扁平聚類算法,它的目标是最小化文檔到其簇中心的歐氏距離平方的平均值。
步驟
1、随機選取k個初始質心
2、計算所有點離質心的距離,将每個點劃分到最近的質心中成為聚類
3、計算每個聚類的平均值,并作為新的質心
4、重複2-3,直到這k個質心不再變化(收斂了),或執行了足夠多的疊代
示例
聲明:以下标号并不是順序标号,而是對應上文的步驟标号,這樣方了解。
首先我標明了這6個點作為示範
他們在坐标上的分布如下圖
1、選取P1、P2作為初始質心(當然其他的也可以)
2、算出每個點距離初始質心的距離,選擇離他最近的初始質心成為一個類
一類:P1
二類:P2、P3、P4、P5、P6
3、重新計算新的質心(這個質心可以是虛拟的,意思就是不是之前存在的點)
紅色标記為新的質心
我們可以看到新的質心中P1還是之前存在的點,而點A是新生成的質心,并不是之前存在的點!!
一類:P1
二類:P2、P3、P4、P5、P6
質心還在變化,是以要繼續進行2、3步驟
2、算出每個點距離質心距離,選擇距離比較近的質心組成一個類
一類:P1、P2、P3
二類:P3、P4、P5
3、重新計算簇中的質心
質心還在變化,是以要繼續進行2、3步驟
2、算出每個點距離質心距離,選擇距離比較近的質心組成一個類
3、重新計算簇中的質心
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。
(2)繼續從集合中取點,比如R,計算R到已經産生的所有Canopy的距離,如果到某個Canopy的距離小于T1,則将R加入到該Canopy;如果R到所有Canopy中心的距離都大于T1,則将R作為一個新Canopy,如下圖中的Q就是一個新的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的取值
以這三個點為例:
對點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
思路小結
參考文獻
[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