基于密度的聚類方法 Density-based clustering

“The observation of and the search for similarities and differences are the basis of all human knowledge.” —— ALFRED B. NOBEL

“人類所有知識的基礎就是觀察和尋找相似與相異” —— 阿爾弗雷德·伯恩哈德·諾貝爾

前言

我們生活在數據大爆炸時代,每時每刻都在產生海量的數據如視頻,文本,圖像和博客等。由于數據的類型和大小已經超出了人們傳統手工處理的能力范圍,聚類,作為一種最常見的無監督學習技術,可以幫助人們給數據自動打標簽,已經獲得了廣泛應用。聚類的目的就是把不同的數據點按照它們的相似與相異度分割成不同的簇(注意:簇就是把數據劃分后的子集),確保每個簇中的數據都是盡可能相似,而不同的簇里的數據盡可能的相異。從模式識別的角度來講,聚類就是在發現數據中潛在的模式,幫助人們進行分組歸類以達到更好理解數據的分布規律。

聚類的應用非常廣泛,比如在商業應用方面,聚類可以幫助市場營銷人員將客戶按照他們的屬性分層,發現不同的客戶群和他們的購買傾向(如下圖將客戶按照他們對顏色喜好歸類)。這樣公司就可以尋找潛在的市場,更高效地開發制定化的產品與服務。在文本分析處理上,聚類可以幫助新聞工作者把最新的微博按照的話題相似度進行分類,而快速得出熱點新聞和關注對象。在生物醫學上,可以根據對相似表達譜的基因進行聚類,從而知道未知基因的功能。


聚類可以將大規模的客戶數據按照客戶喜好進行歸類,比如該圖展示了聚類后發現了3個簇

由于聚類是無監督學習方法,不同的聚類方法基于不同的假設和數據類型。由于數據通常可以以不同的角度進行歸類,因此沒有萬能的通用聚類算法,并且每一種聚類算法都有其局限性和偏見性。也就是說某種聚類算法可能在市場數據上效果很棒,但是在基因數據上就無能為力了。

聚類算法很多,包括基于劃分的聚類算法(如: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的工作原理。


當設置MinPts=4的時候,紅點為高密度點,藍點為異常點,黃點為邊界點。紅黃點串成一起成了一個簇。


由于DBSCAN是靠不斷連接鄰域內高密度點來發現簇的,只需要定義鄰域大小和密度閾值,因此可以發現不同形狀,不同大小的簇。下圖展示了一個二維空間的DBSCAN聚類結果。


DBSCAN可以發現2個弧形的簇


DBSCAN算法偽碼表達如下:


DBSCAN實現偽碼(來源: Han 2011)

發現不同密度的簇

由于DBSCAN使用的是全局的密度閾值MinPts, 因此只能發現密度不少于MinPts的點組成的簇,即很難發現不同密度的簇。其成功與失敗的情況舉例如下:


左圖有三個簇,一個全局密度閾值可以把三個簇分開。但是在右圖中,一個閾值無法把三個簇分開,過高的閾值會把C3全部變成異常點,過低的閾值會把C1和C2合并起來。(來源:http://www.sciencedirect.com/science/article/pii/S0031320316301571)


為了解決其發現不同密度的簇,目前已經有很多新的方法被發明出來,比如OPTICS (ordering points to identify the clustering structure)將鄰域點按照密度大小進行排序,再用可視化的方法來發現不同密度的簇,如下圖所示。OPTICS必須由其他的算法在可視化的圖上查找“山谷”來發現簇,因此其性能直接受這些算法的約束。


OPTICS將數據以密度的形式排序并展示,不同的山谷就是不同密度大小的簇。(來源: https://en.wikipedia.org/wiki/OPTICS_algorithm)

另外SNN (shared nearest neighbor)采用一種基于KNN(最近鄰)來算相似度的方法來改進DBSCAN。對于每個點,我們在空間內找出離其最近的k個點(稱為k近鄰點)。兩個點之間相似度就是數這兩個點共享了多少個k近鄰點。如果這兩個點沒有共享k近鄰點或者這兩個點都不是對方的k近鄰點,那么這兩個點相似度就是0。然后我們把DBSCAN里面的距離公式替換成SNN相似度,重新算每個點的鄰域和密度,就可以發現不同密度的簇了。SNN的核心就是,把原始的密度計算替換成基于每對點之間共享的鄰域的范圍,而忽略其真實的密度分布。SNN的缺點就是必須定義最近鄰個數k, 而且其性能對k的大小很敏感。下圖展示了SNN計算相似度的方法。


i點和j點共享4個近鄰點,所以它們相似度為4

2014年Science 雜志刊登了一種基于密度峰值的算法DP (Clustering by fast search and find of density peaks),也是采用可視化的方法來幫助查找不同密度的簇。其思想為每個簇都有個最大密度點為簇中心,每個簇中心都吸引并連接其周圍密度較低的點,且不同的簇中心點都相對較遠。為實現這個思想,它首先計算每個點的密度大小(也是數多少點在鄰域eps-neigbourhood內),然后再計算每個點到其最近的且比它密度高的點的距離。這樣對每個點我們都有兩個屬性值,一個是其本身密度值,一個是其到比它密度高的最近點的距離值。對這兩個屬性我們可以生成一個2維圖表(決策圖),那么在右上角的幾個點就可以代表不同的簇的中心了,即密度高且離其他簇中心較遠。然后我們可以把其他的點逐步連接到離其最近的且比它密度高的點,直到最后連到某個簇中心點為止。這樣所有共享一個簇中心的點都屬于一個簇,而離其他點較遠且密度很低的點就是異常點了。由于這個方法是基于相對距離和相對密度來連接點的,所以其可以發現不同密度的簇。DP的缺陷就在于每個簇必須有個最大密度點作為簇中心點,如果一個簇的密度分布均與或者一個簇有多個密度高的點,其就會把某些簇分開成幾個子簇。另外DP需要用戶指定有多少個簇,在實際操作的時候需要不斷嘗試調整。下圖展示了一個DP生成的決策圖。


左圖為5個簇的分布,右圖為DP生成的決策圖,其右上角5個點就是左圖五個簇的中心點。(來源:http://science.sciencemag.org/content/344/6191/1492)

除此之外,還可以用密度比估計(Density-ratio estimation)來克服DBSCAN無法發現不同密度簇的缺陷。密度比的核心思想就是對每個點,計算其密度與其鄰域密度的比率,然后用密度比計算替換DBSCAN的密度計算來發現核心點Core point,而其他過程和DBSCAN不變。這樣一來,每個局部高密度點就會被選出來作為核心點,從而發現不同密度的簇。基于這個思想,我們還可以把原始數據按其密度分布進行標準化(ReScale),即把密度高的區域進行擴張,密度低的區域繼續收縮。這樣以來,不同密度的簇就可以變成密度相近的簇了,我們再在標準化后的數據上直接跑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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,106評論 6 542
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,441評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,211評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,736評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,475評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,834評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,829評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,009評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,559評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,306評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,516評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,038評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,728評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,132評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,443評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,249評論 3 399
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,484評論 2 379

推薦閱讀更多精彩內容