DBSCAN詳解(密度聚類演算法開篇)
DBSCAN詳解
第二十二次寫部落格,本人數學基礎不是太好,如果有幸能得到讀者指正,感激不盡,希望能借此機會向大家學習。這一篇作為密度聚類演算法族的開篇,主要是介紹其中最流行的一種演算法——DBSCAN,其他演算法在後續會陸續更新,連結附在該篇文章的結尾處。
預備知識:
這一部分主要是談一談DBSCAN中一些概念的定義:-領域、核心物件、密度直達、密度可達以及密度相連。
-領域(-neighborhood)
與資料集中樣本點的距離不大於的樣本點所構成的集合被稱為樣本的-領域,即。
核心物件(core object)
如果樣本點的-領域內所含的樣本點數大於,那麼就被稱為核心物件,即。
密度直達(directly density-reachable)
如果樣本點位於核心物件的-領域中,那麼稱樣本點由密度直達,即且。注:密度直達一般不滿足對稱性,即由密度直達,但反之不一定成立。
密度可達(density-reachable)
存在樣本點序列,其中、,且由密度直達,那麼稱樣本點由密度可達。注:密度可達同樣不滿足對稱性,但是滿足直遞性,即若存在由密度可達,由密度可達,那麼可以推出由密度可達。
密度相連(density-connected)
假設存在樣本點,使得和均由密度直達,那麼就稱和密度相連。注:密度相連滿足對稱性。
推導過程
首先介紹被DBSCAN劃分出來的三類點(核心點、邊界點和噪聲點)、DBSCAN中簇是如何定義的,然後給出該演算法的虛擬碼,並對如何選擇演算法中影響聚類效果的“鄰域引數”進行介紹,最後介紹該演算法的優缺點。
核心點(core point)、邊界點(border point)和噪聲點(noise point)
DBSCAN是密度聚類中的代表性演算法,他主要通過樣本密度來考察樣本間的可連線性,其中簇的形成主要基於樣本間距離的定義以及“鄰域引數”。根據以上條件,在DBSCAN中定義了這幾個概念:-領域、核心物件、密度直達、密度可達和密度相連,並由此引出了三種點的定義,
a)核心點:核心點即核心物件;
b)邊界點:位於核心物件的-領域上和領域中的點;
c)噪聲點:既不是核心點又不是邊界點的樣本。
DBSCAN中的簇
DBSCAN中簇的定義為,樣本集中由密度可達關係匯出的最大的密度相連樣本集合,這種型別的簇滿足以下兩條屬性:
a)連線性:簇中任意兩點均密度可達;
b)最大性:所有密度可達的點必定位於同一個簇中。
DBSCAN的虛擬碼
DBSCAN聚類的大體思路是,先將樣本集中的核心點集提取出來,再隨機選擇一個核心點作為“種子”,通過密度可達性逐步向外發散,進而找到最大的密度相連區域,具體步驟如下所示
演算法第1-7行:初始化核心物件集合,遍歷整個資料集,找出核心物件並加入到該集合中;
演算法第8-9行:初始化簇數目,並將未訪問樣本集合初始化為原始資料集;
演算法第10行:只要核心物件集合中還有核心點存在,就要繼續進行迭代;
演算法第11行:將本次迭代中未訪問的樣本集合拷貝到中;
演算法第12行:從隨機提取出一個核心點作為本次迭代的種子,並將其加入到佇列中;
演算法第13行:將取到的核心點從未訪問樣本集合中剔除;
演算法第14-21行:只要佇列不為空集,那麼每次從其中提取出首個元素,如果該元素為核心物件,那麼就將同時存在在該核心物件-領域中的所有點和未訪問樣本集合中的樣本點記錄到佇列中,並且從中剔除這些點;
演算法第22-23行:找到簇中所有的樣本點後,簇數目增一,然後將那些出現在未訪問的樣本集合原始拷貝中,且未出現在當前未訪問樣本集合的點集合作為本次迭代生成的簇,最後從核心物件集合中剔除中出現的核心點;
演算法第24行:當不滿足第10行的迭代條件時,退出迴圈。
如何選擇DBSCAN的引數
從上述討論可知,“鄰域引數”是影響該演算法聚類質量的兩個重要的因素。根據該演算法的虛擬碼,那些沒有被分配到任何簇中的樣本點被作為噪聲來處理,當設定的比較大而設定的較小時,某些噪聲點甚至會被選為核心點,而當設定的比較小而設定的較大時,該演算法甚至不會生成有效簇。舉例來說,下圖中存在4個被噪聲點包圍的簇,點的密度越大,影象越深。
如果設定的足夠高,那麼DBSCAN就會發現簇C和D,但是這時圖中左側的簇A、B及其周圍的噪聲點將被作為一個簇來處理,如果設定的足夠低,那麼DBSCAN就會發現簇A和B,但是會將圖中右側的所有樣本點做為早噪聲來處理,因此如何選擇鄰域引數非常重要。一種基本的方法是基於-距離的思想,選取某個值,並計算資料集中所有樣本點距離其第(一般取4)個最近鄰的距離,然後將這些距離進行排序,會得到類似於下圖中的特性曲線
可以明顯的看出圖中某點處的-距離急劇上升,那麼這個點所對應的-距離可以作為的值,此時的就是。
DBSCAN的優缺點
DBSCAN的時間複雜度是