“The observation of and the search for similarities and differences are the basis of all human knowledge.” —— ALFRED B. NOBEL
“人類所有知識的基礎就是觀察和尋找相似與相異” —— 阿爾弗雷德·伯恩哈德·諾貝爾
前言
我們生活在數據大爆炸時代,每時每刻都在產生海量的數據如視頻,文本,圖像和博客等。由于數據的類型和大小已經超出了人們傳統手工處理的能力范圍,聚類,作為一種最常見的無監督學習技術,可以幫助人們給數據自動打標簽,已經獲得了廣泛應用。聚類的目的就是把不同的數據點按照它們的相似與相異度分割成不同的簇(注意:簇就是把數據劃分后的子集),確保每個簇中的數據都是盡可能相似,而不同的簇里的數據盡可能的相異。從模式識別的角度來講,聚類就是在發現數據中潛在的模式,幫助人們進行分組歸類以達到更好理解數據的分布規律。
聚類的應用非常廣泛,比如在商業應用方面,聚類可以幫助市場營銷人員將客戶按照他們的屬性分層,發現不同的客戶群和他們的購買傾向(如下圖將客戶按照他們對顏色喜好歸類)。這樣公司就可以尋找潛在的市場,更高效地開發制定化的產品與服務。在文本分析處理上,聚類可以幫助新聞工作者把最新的微博按照的話題相似度進行分類,而快速得出熱點新聞和關注對象。在生物醫學上,可以根據對相似表達譜的基因進行聚類,從而知道未知基因的功能。
由于聚類是無監督學習方法,不同的聚類方法基于不同的假設和數據類型。由于數據通常可以以不同的角度進行歸類,因此沒有萬能的通用聚類算法,并且每一種聚類算法都有其局限性和偏見性。也就是說某種聚類算法可能在市場數據上效果很棒,但是在基因數據上就無能為力了。
聚類算法很多,包括基于劃分的聚類算法(如:k-means),基于層次的聚類算法(如:BIRCH),基于密度的聚類算法(如:DBSCAN),基于網格的聚類算法( 如:STING )等等。本文將介紹聚類中一種最常用的方法——基于密度的聚類方法 (density-based clustering)。
DBSCAN原理及其實現
相比其他的聚類方法,基于密度的聚類方法可以在有噪音的數據中發現各種形狀和各種大小的簇。DBSCAN(Ester, 1996)是該類方法中最典型的代表算法之一(DBSCAN獲得2014 SIGKDD Test of Time Award)。其核心思想就是先發現密度較高的點,然后把相近的高密度點逐步都連成一片,進而生成各種簇。算法實現上就是,對每個數據點為圓心,以eps為半徑畫個圈(稱為鄰域eps-neigbourhood),然后數有多少個點在這個圈內,這個數就是該點密度值。然后我們可以選取一個密度閾值MinPts,如圈內點數小于MinPts的圓心點為低密度的點,而大于或等于MinPts的圓心點高密度的點(稱為核心點Core point)。如果有一個高密度的點在另一個高密度的點的圈內,我們就把這兩個點連接起來,這樣我們可以把好多點不斷地串聯出來。之后,如果有低密度的點也在高密度的點的圈內,把它也連到最近的高密度點上,稱之為邊界點。這樣所有能連到一起的點就成一了個簇,而不在任何高密度點的圈內的低密度點就是異常點。下圖展示了DBSCAN的工作原理。
由于DBSCAN是靠不斷連接鄰域內高密度點來發現簇的,只需要定義鄰域大小和密度閾值,因此可以發現不同形狀,不同大小的簇。下圖展示了一個二維空間的DBSCAN聚類結果。
DBSCAN算法偽碼表達如下:
發現不同密度的簇
由于DBSCAN使用的是全局的密度閾值MinPts, 因此只能發現密度不少于MinPts的點組成的簇,即很難發現不同密度的簇。其成功與失敗的情況舉例如下:
為了解決其發現不同密度的簇,目前已經有很多新的方法被發明出來,比如OPTICS (ordering points to identify the clustering structure)將鄰域點按照密度大小進行排序,再用可視化的方法來發現不同密度的簇,如下圖所示。OPTICS必須由其他的算法在可視化的圖上查找“山谷”來發現簇,因此其性能直接受這些算法的約束。
另外SNN (shared nearest neighbor)采用一種基于KNN(最近鄰)來算相似度的方法來改進DBSCAN。對于每個點,我們在空間內找出離其最近的k個點(稱為k近鄰點)。兩個點之間相似度就是數這兩個點共享了多少個k近鄰點。如果這兩個點沒有共享k近鄰點或者這兩個點都不是對方的k近鄰點,那么這兩個點相似度就是0。然后我們把DBSCAN里面的距離公式替換成SNN相似度,重新算每個點的鄰域和密度,就可以發現不同密度的簇了。SNN的核心就是,把原始的密度計算替換成基于每對點之間共享的鄰域的范圍,而忽略其真實的密度分布。SNN的缺點就是必須定義最近鄰個數k, 而且其性能對k的大小很敏感。下圖展示了SNN計算相似度的方法。
2014年Science 雜志刊登了一種基于密度峰值的算法DP (Clustering by fast search and find of density peaks),也是采用可視化的方法來幫助查找不同密度的簇。其思想為每個簇都有個最大密度點為簇中心,每個簇中心都吸引并連接其周圍密度較低的點,且不同的簇中心點都相對較遠。為實現這個思想,它首先計算每個點的密度大小(也是數多少點在鄰域eps-neigbourhood內),然后再計算每個點到其最近的且比它密度高的點的距離。這樣對每個點我們都有兩個屬性值,一個是其本身密度值,一個是其到比它密度高的最近點的距離值。對這兩個屬性我們可以生成一個2維圖表(決策圖),那么在右上角的幾個點就可以代表不同的簇的中心了,即密度高且離其他簇中心較遠。然后我們可以把其他的點逐步連接到離其最近的且比它密度高的點,直到最后連到某個簇中心點為止。這樣所有共享一個簇中心的點都屬于一個簇,而離其他點較遠且密度很低的點就是異常點了。由于這個方法是基于相對距離和相對密度來連接點的,所以其可以發現不同密度的簇。DP的缺陷就在于每個簇必須有個最大密度點作為簇中心點,如果一個簇的密度分布均與或者一個簇有多個密度高的點,其就會把某些簇分開成幾個子簇。另外DP需要用戶指定有多少個簇,在實際操作的時候需要不斷嘗試調整。下圖展示了一個DP生成的決策圖。
除此之外,還可以用密度比估計(Density-ratio estimation)來克服DBSCAN無法發現不同密度簇的缺陷。密度比的核心思想就是對每個點,計算其密度與其鄰域密度的比率,然后用密度比計算替換DBSCAN的密度計算來發現核心點Core point,而其他過程和DBSCAN不變。這樣一來,每個局部高密度點就會被選出來作為核心點,從而發現不同密度的簇。基于這個思想,我們還可以把原始數據按其密度分布進行標準化(ReScale),即把密度高的區域進行擴張,密度低的區域繼續收縮。這樣以來,不同密度的簇就可以變成密度相近的簇了,我們再在標準化后的數據上直接跑DBSCAN就搞定了。這種方法需要用戶設置鄰域范圍來計算密度比,下圖展示了標準化前后的數據分布對比。
討論
基于密度的聚類是一種非常直觀的聚類方法,即把臨近的密度高的區域練成一片形成簇。該方法可以找到各種大小各種形狀的簇,并且具有一定的抗噪音特性。在日常應用中,可以用不同的索引方法或用基于網格的方法來加速密度估計,提高聚類的速度。基于密度的聚類也可以用在流數據和分布式數據中,關于其他方向的應用,詳見 (Aggarwal 2013).
源碼下載 (Matlab)
DP: ?https://au.mathworks.com/matlabcentral/fileexchange/53922-densityclust
DBSCAN, SNN, OPTICS 和 Density-ratio: https://sourceforge.net/projects/density-ratio/
參考文獻
Aggarwal, C. C., & Reddy, C. K. (Eds.). (2013). Data clustering: algorithms and applications. CRC press.
Ankerst, M., Breunig, M. M., Kriegel, H. P., & Sander, J. (1999, June). OPTICS: ordering points to identify the clustering structure. In ACM Sigmod record (Vol. 28, No. 2, pp. 49-60). ACM.
Ert?z, L., Steinbach, M., & Kumar, V. (2003, May). Finding clusters of different sizes, shapes, and densities in noisy, high dimensional data. In Proceedings of the 2003 SIAM International Conference on Data Mining(pp. 47-58). Society for Industrial and Applied Mathematics.
Ester, M., Kriegel, H. P., Sander, J., & Xu, X. (1996, August). A density-based algorithm for discovering clusters in large spatial databases with noise. In SIGKDD (Vol. 96, No. 34, pp. 226-231).
Han, J., Pei, J., & Kamber, M. (2011).Data mining: concepts and techniques. Elsevier.
Rodriguez, A., & Laio, A. (2014). Clustering by fast search and find of density peaks.Science,344(6191), 1492-1496.
Zhu, Y., Ting, K. M., & Carman, M. J. (2016). Density-ratio based clustering for discovering clusters with varying densities. Pattern Recognition, Volume 60, 2016, Pages 983-997, ISSN 0031-3203.
全文完,轉載必須注明出處:? ?Ye Zhu?2017