Canopy聚類算法(經典,看圖就明白)


只有這個算法思想比較對,其他 的都沒有一開始的remove: 原網址:http://www.shahuwang.com/?p=1021

 Canopy Clustering 這個算法是2000年提出來的,此后與Hadoop配合,已經成為一個比較流行的算法了。確切的說,這個算法獲得的並不是最終結果,它是為其他算法服務的,比如k-means算法。它能有效地降低k-means算法中計算點之間距離的復雜度。Mahout中已經實現了這個算法,不知道其他的機器學習類庫和工具中,有多少是實現了這個算法的。感覺上這個算法要實現不難,難在和Hadoop如何結合上。Hadoop完全不懂,這里我就不說那么多了。 

好書推薦

  首先,我覺得很有必要看一個圖先,這個圖很好得展示了Canopy聚類的過程。圖來自http://picksesame.blogspot.com/2011/05/canopy-clustering.html 可能要翻牆。


 

  圖中有一個T1,一個T2,我們稱之為距離閥值,顯然T1>T2,這兩個值有什么用呢?我們先確定了一個中心,然后計算其他點到這個中心間的距離,當距離大於T1時,小於T1大於T2時,小於T2時,對這個點的處理都是不一樣的。http://micahlabrams.blogspot.com/2011/10/canopy-clustering.html 這篇文章提供了一個很好的偽代碼,我覺得看完之后,加上我稍加的解釋,就能明白canopy聚類的實現過程了:

while D is not empty


      select element d from D to initialize canopy c


      remove d from D


      Loop through remaining elements in D


           if distance between d_i and c < T1 : add element to the canopy c


           if distance between d_i and c < T2 : remove element from D


      end


      add canopy c to the list of canopies C


end

這里有幾點要說明的:D指代一組數據,d_i表示D中的各個數據。

是不是還不夠明白?下面用中文進行說明:

1:給我一組存放在數組里面的數據D

2:給我兩個距離閾值T1,T2,且T1>T2

3:隨機取D中的一個數據d作為中心,並將d從D中移除

4:計算D中所有點到d的距離distance

5:將所有distance<T1的點都歸如到d為中心的canopy1類中(注意哦,小於T2的也是小於T1的,所以也是歸入到canopy1中的哦)

6:將所有distance<T2的點,都從D中移除。(這一步很關鍵的,你回去看上面那個圖,就明白了)

7:重復步驟4到6,直到D為空,形成多個canopy類

通過上面的描述,能理解T1和T2的作用了否?當與中心的距離大於T1時,這些點就不會被歸入到中心所在的這個canopy類中。然當距離小於T1大於T2時,這些點會被歸入到該中心所在的canopy中,但是它們並不會從D中被移除,也就是說,它們將會參與到下一輪的聚類過程中,成為新的canopy類的中心或者成員。亦即,兩個Canopy類中有些成員是重疊的。這是canopy比較關鍵和高明的地方了,當然內在的高明之處我也講不出來,水平不夠。而當距離小於T2的時候,這些點就會被歸入到該中心的canopy類中,而且會從D中被移除,也就是不會參加下一次的聚類過程了。

不知道現在能明白了否?

如果需要用Python利用Hadoop實現canopy的話,可以參考這篇文章http://atbrox.com/2010/02/08/parallel-machine-learning-for-hadoopmapreduce-a-python-example/ 暫時我是理解不了這篇文章先。如果你會,希望能教一下我。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM