DBSCAN聚類演算法

2021-09-02 02:21:51 字數 3221 閱讀 2542

1、演算法引入及簡介

為什麼要引入dbscan?

k均值聚類使用非常廣泛,作為古老的聚類方法,它的演算法非常簡單,而且速度很快。但是其缺點在於它不能識別非球形的簇;而dbscan演算法是將所有點標記為核心點、邊界點或雜訊點,將任意兩個距離不大於e(eps)的核心點歸為同乙個簇,任何與核心點足夠近的邊界點也放到與之相同的簇中,可以發現任意形狀的簇類。

人為構造基於sin函式和cos函式構成的兩組點資料,分別用k均值與dbscan演算法聚類,對比如下:

2、相關概念

1)密度:任意一點的密度是以該點為圓心、以e為半徑的圓區域內包含的點數目。   4

2)ε鄰域:給定物件半徑為ε內的區域稱為該物件的ε鄰域。

3)核心物件:如果物件的e鄰域樣本點數大於等於minpts(最小樣本點數),則稱該物件為核心物件。   a

4)邊界點:在以半徑為e的鄰域內點的數量小於minpts,但是落在其他核心點的鄰域內。    d

5)雜訊點:既不是邊界點也不是核心點的任意點。   e

6)直接密度可達:對於樣本集合d,如果樣本點q在p的ε領域內,並且p為核心物件,那麼物件q從物件p直接密度可達(如果p是乙個核心物件,q屬於p的鄰域,q從p直接密度可達)。

a為核心物件,b為邊界物件,b從a直接密度可達,反過來不成立,因為b不是核心物件

7)密度可達:對於樣本集合d,給定一串樣本點p1,p2….pn,p= p1,q= pn,假如物件pi從pi-1直接密度可達,那麼物件q從物件p密度可達。

b從a直接密度可達,a從c直接密度可達, 故b從c密度可達,同理c從b密度不可達

8)密度相連:存在樣本集合d中的一點o,如果物件o到物件p和物件q都是密度可達的,那麼p和q密度相連。

b從a密度可達,c也從a密度可達,故b和c密度相連。

示例如圖,e用相應半徑表示,設minpts=3

m、p、o、r為核心物件,s、q為邊界點(對應e領域內點的個數為23、演算法描述

輸入: 包含n個物件的資料庫,半徑e,最小樣本點minpts;

輸出:所有生成的簇。

(1)repeat

(2)從資料庫中抽出乙個未處理的點;

(3)if抽出的點是核心點 then 找出所有從該點密度可達的物件,形成乙個簇;

(4)else 抽出的點是邊緣點(非核心物件),跳出本次迴圈,尋找下乙個點;

(5)until 所有的點都被處理。

3.1步驟

(1)dbscan需要二個引數: 掃瞄半徑 (e)和最小包含樣本點數(minpts)。 任選乙個未被訪問(unvisited)的點開始,找出與其距離在e之內(包括e)的所有附近點。

(2)如果 附近點的數量 ≥ minpts,則當前點與其附近點形成乙個簇,並且出發點被標記為已訪問(visited)。 然後遞迴,以相同的方法處理該簇內所有未被標記為已訪問(visited)的點,從而對簇進行擴充套件。

(3)如果 附近點的數量 < minpts,則該點暫時被標記作為雜訊點。

(4)如果簇充分地被擴充套件,即簇內的所有點被標記為已訪問,然後用同樣的演算法去處理未被訪問的點。

3.2具體實現過程

(1)檢測資料庫中尚未檢查過的物件p,找出與其距離在e之內(包括e)的所有附近點,若包含的物件數不小於minpts,建立新簇c,將其中的所有點加入候選集n;

(2)對候選集n 中所有尚未被處理的物件q,檢查其鄰域,若至少包含minpts個物件,則將這些物件加入n;如果q 未歸入任何乙個簇,則將q 加入c;

(3)重複步驟2),繼續檢查n 中未處理的物件,當前候選集n為空;

(4)重複步驟1)~3),直到所有物件都歸入了某個簇或標記為雜訊。

3.3例項

如下二維資料集,設e=3.minpts=3,使用dbscan對其聚類

先掃瞄樣本點p1(1,2)

計算其e鄰域,即找樣本點中與其距離不大於e的樣本點

p1樣本點的e鄰域為:

p1的密度為4>minpts,因此p1是核心點

以p1點建立新簇c1,令n為p1鄰域內的點的集合

對n中的每乙個點q,如果q未處理過且是核心點,則將q鄰域內的點併入n。如果q還不是任何簇的成員,把q新增到c1

對p2鄰域為,為核心點且未處理過將其鄰域內的點併入n,把p2新增到c1

對p3,鄰域為,同上,將p3鄰域內的點併入n,把p3新增到c1

對p13,鄰域為,同上,將p13鄰域內的點併入n,把p13新增到c1

繼續考慮n中未處理的點p4,鄰域為,將p4鄰域內的點併入n, 把p4新增到c1

此時集合n中物件全部處理完畢,得到簇c1,包含點

繼續掃瞄樣本點p5(5,8),同上得簇c2,包含

繼續掃瞄樣本點p9(9,5):

計算其e鄰域為,為非核心點

繼續掃瞄樣本點p10(1,12):

p10樣本點的e鄰域為,為非核心點

繼續掃瞄樣本點p11(3,12):

p11 樣本點e鄰域為,p11是核心點

以p11點建立新簇c3,令n為p11鄰域內點的集合

對n中的每乙個點q,如果q未處理過且是核心點,則將q鄰域內的點併入n。如果q還不是任何簇的成員,把q新增到c1

對p10,非核心點,把p10加入c3

對p12,鄰域為,非核心點,把p12加入c3

此時n中物件處理完畢得到簇c3

繼續掃瞄樣本點,p12和p13都已經處理過,演算法結束

最後聚類結果為:3個簇    c1    c2    c3

樣本點p9未歸類為任何乙個,最後判定為雜訊

3.4演算法偽**

其中expandcluster演算法偽碼如下:

3.5關於e和minpts引數的選擇

給定minpts

1)e值過大:很多雜訊被錯誤的歸入簇,分離的若干個               自然簇錯誤的合併為乙個簇

2)e值過小:大量物件被錯誤的標記為雜訊

給定e值

1)minpts值過大:核心點數量減少,使得一些包含物件數較少的自然簇被弄丟

2)minpts值過小:大量物件被標記為核心點,從而將雜訊歸入簇

4、演算法優缺點及改進

4.1優點:

1)與k-means方法相比,dbscan不需要事先知道要形成的簇類的數量。

2)與k-means方法相比,dbscan可以發現任意形狀的簇類。

3)同時,dbscan能夠識別出雜訊點。

4)dbscan對於資料庫中樣本的順序不敏感,但是,對於處於簇類之間邊界樣本,可能會根據哪個簇類優先被探測到而其歸屬有所擺動。

4.2缺點:

1)於高維資料,密度定義較麻煩。

2)簇的密度變化太大,會有麻煩。

聚類演算法 DBSCAN

dbscan 是一種簡單的,基於密度的聚類演算法。本次實現中,dbscan 使用了基於中心的方法。在基於中心的方法中,每個資料點的密度通過對以該點為中心以邊長為 2 eps 的網格 鄰域 內的其他資料點的個數來度量。根據資料點的密度分為三類點 1 核心點 該點在鄰域內的密度超過給定的閥值 minps...

DBSCAN聚類演算法

基於密度定義,我們將點分為 dbscan演算法的本質就是隨大流,邊界點緊緊圍繞著核心點,他們抱團,不帶噪點玩兒 小團體多了,聯絡比較密切的小團體之間聚成了同個類 比較偏遠的小團體想要加入這個圈子,進不去,就單幹,我們自己玩自己的,聚成了另外的乙個類 一開始就被孤立的噪點吧,自然有自己的傲骨,接著孤芳...

DBSCAN 聚類演算法

dbscan演算法是一種基於密度聚類的演算法。核心概念 核心點 若某個點的密度達到演算法設定的閾值 即 r 鄰域內點的數量不小於 minpts 則其為核心點。直接密度可達 若某點p在點q的 r 鄰域內,且q是核心點,則稱p從q出發直接密度可達。密度可達 若有乙個點的序列q0 q1 qk,對任意qi從...