常用聚类算法(基于密度的聚类算法
前言:
基于密度聚類的經(jīng)典算法 DBSCAN(Density-Based Spatial Clustering of Application with Noise, 具有噪聲的基于密度的空間聚類應(yīng)用)是一種基于高密度連接區(qū)域的密度聚類算法。
DBSCAN的基本算法流程如下:從任意對象P 開始根據(jù)閾值和參數(shù)通過廣度優(yōu)先搜索提取從P 密度可達(dá)的所有對象,得到一個聚類。若P 是核心對象,則可以一次標(biāo)記相應(yīng)對象為當(dāng)前 類并以此為基礎(chǔ)進(jìn)行擴(kuò)展。得到一個完整的聚類后,再選擇一個新的對象重復(fù)上述過程。 若P是邊界對象,則將其標(biāo)記為噪聲并舍棄
缺陷:
如聚類的結(jié)果與參數(shù)關(guān)系較大,導(dǎo)致閾值過大容易將同一聚類分割, 或閾值過小容易將不同聚類合并
固定的閾值參數(shù)對于稀疏程度不同的數(shù)據(jù)不具適應(yīng)性,導(dǎo)致密度小的區(qū)域同一聚類易被分割, 或密度大的區(qū)域不同聚類易被合并
DBSCAN(Density-Based Spatial Clustering of Applications with Noise) 一個比較有代表性的基于密度的聚類算法。與層次聚類方法不同,它將簇定義為密度相 連的點的最大集合,能夠把具有足夠高密度的區(qū)域劃分為簇,并可在有“噪聲”的空間數(shù) 據(jù)庫中發(fā)現(xiàn)任意形狀的聚類。
基于密度的聚類方法是以數(shù)據(jù)集在空間分布上的稠密度為依據(jù)進(jìn)行聚類,無需預(yù)先設(shè)定 簇的數(shù)量,因此特別適合對于未知內(nèi)容的數(shù)據(jù)集進(jìn)行聚類。而代表性算法有:DBSCAN,OPTICS。 以DBSCAN算法舉例,DBSCAN目的是找到密度相連對象的最大集合。
1.DBSCAN算法
首先名詞解釋:
ε(Eps)鄰域:以給定對象為圓心,半徑為ε的鄰域為該對象的ε鄰域
核心對象:若ε鄰域至少包含MinPts個對象,則稱該對象為核心對象
直接密度可達(dá):如果p在q的ε鄰域內(nèi),而q是一個核心對象,則說對象p從對象q出發(fā)是直接密度可達(dá)的
密度可達(dá):如果存在一個對象鏈p1 , p2 , … , pn , p1=q, pn=p, 對于pi ∈D(1<= i <=n), pi+1 是從 pi 關(guān)于ε和MinPts直接密度可達(dá)的, 則對象p是從對象q關(guān)于ε和MinPts密度可達(dá)的
密度相連:對象p和q都是從o關(guān)于ε和MinPts密度可達(dá)的,那么對象p和q是關(guān)于ε和MinPts密度相連的
噪聲: 一個基于密度的簇是基于密度可達(dá)性的最大的密度相 連對象的集合。不包含在任何簇中的對象被認(rèn)為是“噪聲”
邊界點:邊界點不是核心點,但落在某個核心點的鄰域內(nèi)。
DBSCAN 算法根據(jù)以上的定義在數(shù)據(jù)庫中發(fā)現(xiàn)簇和噪聲。簇可等價于集合D中, 這個簇核心對象密度可達(dá)的所有對象的集合。
DBSCAN算法描述:
輸入:包含n個對象的數(shù)據(jù)庫,半徑ε,最少數(shù)目MinPts。
輸出:所有生成的簇,達(dá)到密度要求。
1.REPEAT
2.從數(shù)據(jù)庫中抽取一個未處理過的點;
3.IF 抽出的點是核心點 THEN找出所有從該點密度可達(dá)的對象,形成一個簇
4.ELSE 抽出的點是邊緣點(非核心對象),跳出本次循環(huán),尋找下一點;
5.UNTIL 所有點都被處理;
DBSCAN算法步驟 :
輸入:數(shù)據(jù)集D,參數(shù)MinPts, ε 輸出:簇集合
(1) 首先將數(shù)據(jù)集D中的所有對象標(biāo)記unvisited ;
(2) do
(3) 從D中隨機(jī)選取一個unvisited對象p,并將p標(biāo)記為visited ;
(4) if p的 ε 鄰域 包含的對象數(shù)至少為MinPts個
(5) 創(chuàng)建新簇C ,并把p添加到c中;
(6) 令N為 p的 ε 鄰域 中對象的集合;
(7) for N 中每個點pi
(8) if pi 是unvisited
(9) 標(biāo)記pi 為visited;
(10) if pi 的ε 鄰域 至少有MinPts個 對象,把這些對象添加到N ;
(11) if pi 還不是任何簇的對象。將 pi 添加到 簇C中 ;
(12) end for
(13) 輸出C
(14) Else 標(biāo)記p 為噪聲
(15) Untill 沒有標(biāo)記為unvisited 的對象
下面給出一個樣本事務(wù)數(shù)據(jù)庫(見下表),對它實施DBSCAN算法。
根據(jù)所給的數(shù)據(jù)通過對其進(jìn)行DBSCAN算法,以下為算法的步驟(設(shè)n=12,用戶輸入ε=1,MinPts=4)
| 序列 | 屬性1 | 屬性2 |
| 1 | 2 | 1 |
| 2 | 5 | 1 |
| 3 | 1 | 2 |
| 4 | 2 | 2 |
| 5 | 3 | 2 |
| 6 | 4 | 2 |
| 7 | 5 | 2 |
| 8 | 6 | 2 |
| 9 | 1 | 3 |
| 10 | 2 | 3 |
| 11 | 5 | 3 |
| 12 | 2 | 4 |
DBSCAN聚類過程
第1步,在數(shù)據(jù)庫中選擇一點1,由于在以它為圓心的 以1為半徑的圓內(nèi)包含2個點(小于4),因此它不是核心點,選擇下一個點。
第2步,在數(shù)據(jù)庫中選擇一點2,由于在以它為圓心的,以1為半徑的圓內(nèi)包含2個點, 因此它不是核心點,選擇下一個點。
第3步,在數(shù)據(jù)庫中選擇一點3,由于在以它為圓心的,以1為半徑的圓內(nèi)包含3個點, 因此它不是核心點,選擇下一個點。
第4步,在數(shù)據(jù)庫中選擇一點4,由于在以它為圓心的,以1為半徑的圓內(nèi)包含5個點, 因此它是核心點,尋找從它出發(fā)可達(dá)的點(直接可達(dá)4個,間接可達(dá)3個), 聚出的新類{1,3,4,5,9,10,12},選擇下一個點。
第5步,在數(shù)據(jù)庫中選擇一點5,已經(jīng)在簇1中,選擇下一個點。
第6步,在數(shù)據(jù)庫中選擇一點6,由于在以它為圓心的,以1為半徑的圓內(nèi)包含3個點, 因此它不是核心點,選擇下一個點。
第7步,在數(shù)據(jù)庫中選擇一點7,由于在以它為圓心的,以1為半徑的圓內(nèi)包含5個點, 因此它是核心點,尋找從它出發(fā)可達(dá)的點,聚出的新類{2,6,7,8,11},選擇下一個點。
第8步,在數(shù)據(jù)庫中選擇一點8,已經(jīng)在簇2中,選擇下一個點。
第9步,在數(shù)據(jù)庫中選擇一點9,已經(jīng)在簇1中,選擇下一個點。
第10步,在數(shù)據(jù)庫中選擇一點10,已經(jīng)在簇1中,選擇下一個點。
第11步,在數(shù)據(jù)庫中選擇一點11,已經(jīng)在簇2中,選擇下一個點。
第12步,選擇12點,已經(jīng)在簇1中,由于這已經(jīng)是最后一點所有點都以處理,程序終止。
算法執(zhí)行過程
| 步驟 | 選擇的點 | 在ε中點的個數(shù) | 通過計算可達(dá)到而找到新的簇 |
| 1 | 1 | 2 | 無 |
| 2 | 2 | 2 | 無 |
| 3 | 3 | 3 | 無 |
| 4 | 4 | 5 | 簇C1:{1,3,4,5,9,10,12} |
| 5 | 5 | 3 | 已在一個簇C1中 |
| 6 | 6 | 3 | 無 |
| 7 | 7 | 5 | 簇C2:{2,6,7,8,11} |
| 8 | 8 | 2 | 已在一個簇C2中 |
| 9 | 9 | 3 | 已在一個簇C1中 |
| 10 | 10 | 4 | 已在一個簇C1中 |
| 11 | 11 | 2 | 已在一個簇C2中 |
| 12 | 12 | 2 | 已在一個簇C1中 |
DBSCAN的時間復(fù)雜性:
DBSCAN算法要對每個數(shù)據(jù)對象進(jìn)行鄰域檢查時間性能較低。
~DBSCAN的基本時間復(fù)雜度是 O(N*找出Eps領(lǐng)域中的點所需要的時間), N是點的個數(shù)。 最壞情況下時間復(fù)雜度是O(N2)
~在低維空間數(shù)據(jù)中,有一些數(shù)據(jù)結(jié)構(gòu)如KD樹,使得可以有效的檢索特定點給定距離內(nèi)的所有點, 時間復(fù)雜度可以降低到O(NlogN)
DBSCAM的空間復(fù)雜性:
在聚類過程中,DBSCAN一旦找到一個核心對象,即以該核心對象為中心向外擴(kuò)展. 此過程中核心對象將不斷增多,未處理的對象被保留在內(nèi)存中.若數(shù)據(jù)庫中存在龐大的聚類, 將需要很大的存來存儲核心對象信息,其需求難以預(yù)料.
當(dāng)數(shù)據(jù)量增大時,要求較大的內(nèi)存支持 I/0 消耗也很大;低維或高維數(shù)據(jù)中,其空間都是O(N)
總結(jié)
以上是生活随笔為你收集整理的常用聚类算法(基于密度的聚类算法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何查看网站的在全国各地的打开速度
- 下一篇: 京东白条提现上征信吗 关键在这...