——一種基於高密度連通區域的演算法
劃分方法和層次方法旨在發現球狀簇,它們很難發現任意形狀的簇。為了發現任意形狀的簇,我們把簇看作資料空間中被稀疏區域分開的稠密區域,即基於密度的聚類演算法可發現任意形狀的簇,這對於有雜訊點的資料有重要作用。
基於密度演算法主要特點:
發現任意形狀的簇;
可處理雜訊點;
一次掃瞄;
需要密度引數作為終止條件。
dbscan中的幾個定義:
ε-領域:確定物件的領域,即物件o的ε-領域是以o為中心,以ε為半徑的空間。
領域的密度:可用領域內的物件數度量。稠密區域的密度閥值由引數minpts確定(使用者指定)。
核心物件:若乙個物件的ε-領域至少包含minpts個物件,則該物件是核心物件。
直接密度可達:對於資料集d,如果物件p在q的ε-領域內,且q為核心物件,那麼p是從q(關於ε和minpts)直接密度可達的。
密度可達:對於資料集d,如果存在乙個物件鏈p1,p2,p3……pn,使得p1=q,pn=p,且對於pi∈d(1<=i<=n),若p(i+1)是從pi直接密度可達的,那麼p是從q密度可達的。
密度相連:對於物件集d,如果存在乙個物件q∈d,使得物件p1和p2都是從q關於ε和minpts密度可達的,則兩個物件p1,p2∈d是關於ε和minpts密度相連的。
總的來說,dbscan演算法就是找到密度相連物件的最大集合。
dbscan演算法思想:
由密度可達關係匯出的最大密度相連的樣本集合,為最終簇。
對於給定的資料集d,首先給定引數ε和minpts。
任意訪問乙個未讀取過的物件點,根據ε和minpts判斷是否是核心物件,如果不是核心物件就是邊界點或雜訊點。
若是核心物件,則找到這個核心物件能夠密度可達的所有樣本集合,即為乙個聚類簇。
再訪問其他未被讀取過的核心物件去尋找密度可達的樣本集合,此時得到另乙個簇,一直執行直到所有核心物件都被訪問過為止。
通過dbscan生成的簇裡面,可以有乙個或多個核心物件,如果只有乙個核心物件,則簇裡其他非核心物件樣本都在這個核心物件的ε-領域裡;若有多個核心物件,則任意乙個核心物件的ε-領域中一定有有乙個其他的核心物件,否則這兩個核心物件無法密度可達。這些核心物件的ε-領域裡的所有樣本的集合組成乙個dbscan聚類簇。
基本上這就是dbscan演算法的主要內容,還需要考慮三個問題。
第一:對於異常樣本點或說是少量游離於簇外的樣本點,這些點不在任何乙個核心物件的ε-領域內,稱為雜訊點。
第二個:距離的度量,即如何計算樣本點和核心點之間的距離。在dbscan中一般採用最近鄰思想,如歐式距離。如果樣本量較大,則採用kd樹或者球樹快速搜尋最近鄰。
第三個:較特殊,某些樣本可能到兩個核心物件的距離都小於ε,但這兩個核心物件由於不是密度直達,又不屬於同乙個簇,那麼如何界定這個樣本的類別呢?一般來說,此時dbscan採用先來後到,先進行聚類的簇會標記該樣本為它的類別。
dbscan演算法描述:
輸入:包含n個物件的資料庫,引數ε和minpts,
輸出:所有生成的簇,達到密度要求,
repeat
從資料庫中抽取乙個未處理過的點;
if抽出的點是核心物件點;
then 找出所有從核心密度可達的物件,形成乙個簇;
else 抽出的點是非核心物件點(邊緣點或雜訊點)跳出此次迴圈,尋找下乙個未訪問點;
utill所有點都被處理。
dbscan演算法優點:
能克服基於距離的演算法只能發現球狀簇。它可發現任意形狀的簇。
可在聚類的同時發現異常點,對資料集中異常點不敏感。
對資料輸入順序不敏感。
缺點:對輸入引數ε和minpts敏感,確定引數困難;
由於dbscan演算法中,變數ε和minpts是全域性唯一的,當空姐聚類的密度不均勻時,聚類距離相差很大,聚類質量差。
當資料量大時,計算密度單元的計算複雜度大,需要建立空間索引來降低計算量,如kd樹。
matlab上的實現:
**一:**二:
matlab練習程式(DBSCAN)
和kmeans相比,不需要事先知道資料的類數。以程式設計的角度來考慮,具體演算法流程如下 1.首先選擇乙個待處理資料。2.尋找和待處理資料距離在設定半徑內的資料。3.將找到的半徑內的資料放到乙個佇列中。4.拿佇列頭資料作為當前待處理資料並不斷執行第2步。5.直到遍歷完佇列中所有資料,將這些資料記為一...
DBSCAN演算法隨記
以質點為圓心,以半徑r畫圓,圓圈中的點個數有木有達到設定的閾值,半徑r需要自己指定。與k means不同,不用設定k值但其他的引數 r,minpts 設定依然是乙個問題。直接密度可達是指 以q為圓心,在半徑為r的圓內點p,叫直接密度可達。密度可達是指 以q0為圓心,在半徑為r的圓內點q1。再以q1為...
dbscan演算法中 引數的意義 DBSCAN演算法
簡單的說就是根據乙個根據物件的密度不斷擴充套件的過程的演算法。乙個物件o的密度可以用靠近o的物件數來判斷。學習dbscan演算法,需要弄清楚幾個概念 一 基本概念 1.2.minpts 領域密度閥值 物件的 3.核心物件 如果物件o 4.直接密度可達 如果物件p在核心物件q的 5.密度可達 在dbs...