dbscan是一種基於密度的聚類演算法,這類密度聚類演算法一般假定類別可以通過樣本分佈的緊密程度決定。同一類別的樣本,他們之間的緊密相連的,也就是說,在該類別任意樣本周圍不遠處一定有同類別的樣本存在。
通過將緊密相連的樣本劃為一類,這樣就得到了乙個聚類類別。通過將所有各組緊密相連的樣本劃為各個不同的類別,則我們就得到了最終的所有聚類類別結果。
dbscan是基於一組鄰域來描述樣本集的緊密程度的,引數(ϵ, minpts)用來描述鄰域的樣本分佈緊密程度。其中,ϵ描述了某一樣本的鄰域距離閾值,minpts描述了某一樣本的距離為ϵ的鄰域中樣本個數的閾值。
假設我的樣本集是d=(x1,x2,…,xm)
,則dbscan具體的密度描述定義如下:
1) ϵ-鄰域:
對於xj∈d,其ϵ-鄰域包含樣本集d中與xj的距離不大於ϵ的子樣本集,即nϵ(xj)=, 這個子樣本集的個數記為|nϵ(xj)|
2) 核心物件:
對於任一樣本xj∈d,如果其ϵ-鄰域對應的nϵ(xj)至少包含minpts個樣本,即如果**|nϵ(xj)|≥minpts**,則xj是核心物件。
樣本的ϵ-鄰域中的點大於等於minpts的樣本3)密度直達:如果xi位於xj的ϵ-鄰域中,且xj是核心物件,則稱xi由xj密度直達。注意反之不一定成立,即此時不能說xj由xi密度直達, 除非且xi也是核心物件。
核心物件由任意乙個在同乙個核心物件的ϵ-鄰域中的點直達4)密度可達:對於xi和xj,如果存在樣本樣本序列p1,p2,…,pt,滿足p1=xi,pt=xj, 且pt+1由pt密度直達,則稱xj由xi密度可達。也就是說,密度可達滿足傳遞性。此時序列中的傳遞樣本p1,p2,…,pt−1均為核心物件,因為只有核心物件才能使其他樣本密度直達。注意密度可達也不滿足對稱性,這個可以由密度直達的不對稱性得出。
在同乙個核心物件的ϵ-鄰域中的點之間均由核心物件相互密度可達。5)密度相連:對於xi和xj,如果存在核心物件樣本xk,使xi和xj均由xk密度可達,則稱xi和xj密度相連。注意密度相連關係是滿足對稱性的。
示例1:
其中當minpts=3時,虛線圈表示ε鄰域,則從圖中我們可以觀察到:
x1是核心物件;
x2由x1密度直達;
x3由x1密度可達;
x3與x4密度相連。
示例2:
從下圖可以很容易看出理解上述定義,圖中minpts=5,紅色的點都是核心物件,因為其ϵ-鄰域至少有5個樣本。黑色的樣本是非核心物件。所有核心物件密度直達的樣本在以紅色核心物件為中心的超球體內,如果不在超球體內,則不能密度直達。圖中用綠色箭頭連起來的核心物件組成了密度可達的樣本序列。在這些密度可達的樣本序列的ϵ-鄰域內所有的樣本相互都是密度相連的。
dbscan的聚類定義很簡單:由密度可達關係匯出的最大密度相連的樣本集合,即為我們最終聚類的乙個類別,或者說乙個簇。
這個dbscan的簇裡面可以有乙個或者多個核心物件。如果只有乙個核心物件,則簇裡其他的非核心物件樣本都在這個核心物件的ϵ-鄰域裡;如果有多個核心物件,則簇裡的任意乙個核心物件的ϵ-鄰域中一定有乙個其他的核心物件,否則這兩個核心物件無法密度可達。這些核心物件的ϵ-鄰域裡所有的樣本的集合組成的乙個dbscan聚類簇。
那麼怎麼才能找到這樣的簇樣本集合呢?dbscan使用的方法很簡單,一開始任意選擇乙個沒有被標記的核心物件,找到它的所有密度可達物件,即乙個簇,這些核心物件以及它們ε鄰域內的點被標記為同乙個類;然後再找乙個未標記過的核心物件,重複上邊的步驟,直到所有核心物件都被標記為止。
基本上這就是dbscan演算法的主要內容了,是不是很簡單?但是我們還是有三個問題沒有考慮。
第乙個是一些異常樣本點或者說少量游離於簇外的樣本點,這些點不在任何乙個核心物件在周圍,在dbscan中,我們一般將這些樣本點標記為噪音點。
第二個是距離的度量問題,即如何計算某樣本和核心物件樣本的距離。在dbscan中,一般採用最近鄰思想,採用某一種距離度量來衡量樣本距離,比如歐式距離。這和knn分類演算法的最近鄰思想完全相同。對應少量的樣本,尋找最近鄰可以直接去計算所有樣本的距離,如果樣本量較大,則一般採用kd樹或者球樹來快速的搜尋最近鄰。
第三種問題比較特殊,某些樣本可能到兩個核心物件的距離都小於ϵ,但是這兩個核心物件由於不是密度直達,又不屬於同乙個聚類簇,那麼如果界定這個樣本的類別呢?一般來說,此時dbscan採用先來後到,先進行聚類的類別簇會標記這個樣本為它的類別。也就是說dbscan的演算法不是完全穩定的演算法。
之前我們學過了kmeans演算法,使用者需要給出聚類的個數k,然而我們往往對k的大小無法確定。dbscan演算法最大的優勢就是無需給定聚類個數k,且能夠發現任意形狀的聚類,且在聚類過程中能自動識別出離群點。那麼,我們在什麼時候使用dbscan演算法來聚類呢?一般來說,如果資料集比較稠密且形狀非凸,用密度聚類的方法效果要好一些。
不需要事先指定聚類個數,且可以發現任意形狀的聚類;
對異常點不敏感,在聚類過程中能自動識別出異常點;
聚類結果不依賴於節點的遍歷順序;
對於密度不均勻,聚類間分布差異大的資料集,聚類質量變差;
樣本集較大時,演算法收斂時間較長;
調參較複雜,要同時考慮兩個引數;
原始演算法中所有被鄰域包含在內的點都是被訪問過的點,包括基點(鄰域中心點),優化後只有算過鄰域的點即基點才算是被訪問過的點
參考
DBSCAN 密度聚類
dbscan 密度聚類 dbscan演算法是一種基於密度的聚類演算法 聚類的時候不需要預先指定簇的個數 最終的簇的個數不定 dbscan演算法將資料點分為三類 核心點 在半徑eps內含有超過minpts數目的點 邊界點 在半徑eps內點的數量小於minpts,但是落在核心點的鄰域內 噪音點 既不是核...
DBSCAN密度聚類
dbscan是一種基於密度的聚類演算法,這類密度聚類演算法一般假定類別可以通過樣本分佈的緊密程度決定。同一類別的樣本,他們之間的緊密相連的,也就是說,在該類別任意樣本周圍不遠處一定有同類別的樣本存在。通過將緊密相連的樣本劃為一類,這樣就得到了乙個聚類類別。通過將所有各組緊密相連的樣本劃為各個不同的類...
密度聚類演算法DBScan
利用密度聚類dbscan對樣本進行分類。基本思路 1 讀取兩組不同資料訓練 2 分別對兩組資料進行聚類 3 將聚類結果視作乙個多維空間的點,計算其到原點的歐氏距離 4 根據ans1和ans2的歐氏距離找到合適的閾值 幾個必要概念 鄰域 對於樣本集中的xj,它的 鄰域為樣本集中與它距離小於 的樣本所構...