聚类算法(part1)--DBSCAN
學(xué)習(xí)筆記,僅供參考,有錯(cuò)必糾
參考書目:《數(shù)據(jù)挖掘?qū)д摗?#xff1b;《R語言實(shí)戰(zhàn)》;《應(yīng)用預(yù)測(cè)建模》;《R語言與數(shù)據(jù)挖掘》;等
聚類
密度聚類
基于密度的聚類尋找被低密度區(qū)域分離的高密度區(qū)域。DBSCAN是一種簡(jiǎn)單、有效的基于密度的聚類算法,它解釋了基于密度的聚類方法的許多重要概念。
基于中心的方法
在基于中心的方法中,數(shù)據(jù)集中特定點(diǎn)的密度通過對(duì)該點(diǎn)EpsEpsEps半徑之內(nèi)的點(diǎn)計(jì)數(shù)(包括點(diǎn)本身)來估計(jì)。如下圖所示,點(diǎn)A的EpsEpsEps半徑內(nèi)點(diǎn)個(gè)數(shù)為7,且包括A本身:
該方法實(shí)現(xiàn)簡(jiǎn)單,但是點(diǎn)的密度取決于指定的半徑,例如,如果半徑足夠大,則所有點(diǎn)的密度都等于數(shù)據(jù)集中的點(diǎn)數(shù)m,同理,如果半徑太小,則所有點(diǎn)的密度都是1。
根據(jù)基于中心的密度進(jìn)行點(diǎn)分類
密度的基于中心的方法使得我們可以將點(diǎn)分類為(1)稠密區(qū)域內(nèi)部的點(diǎn)(核心點(diǎn)),(2)稠密區(qū)域邊緣上的點(diǎn)(邊界點(diǎn)),(3)稀疏區(qū)域中的點(diǎn)(噪聲或背景點(diǎn))。下圖展示了核心點(diǎn)、邊界點(diǎn)和噪聲點(diǎn)的概念:
-
核心點(diǎn):這些點(diǎn)在基于密度的簇內(nèi)部。點(diǎn)的鄰域由距離函數(shù)和用戶指定的距離參數(shù)EpsEpsEps決定,核心點(diǎn)的定義是,如果該點(diǎn)的給定鄰域內(nèi)的點(diǎn)的個(gè)數(shù)超過給定的閾值
MinPtsMinPtsMinPts,則該點(diǎn)為核心點(diǎn),其中MinPtsMinPtsMinPts也是一個(gè)用戶指定的參數(shù)。上圖中,點(diǎn)A是核心點(diǎn)。 -
邊界點(diǎn):邊界點(diǎn)不是核心點(diǎn),但它落在某個(gè)核心點(diǎn)的鄰域內(nèi)。上圖中,點(diǎn)B是邊界點(diǎn)。邊界點(diǎn)可能落在多個(gè)核心點(diǎn)的鄰域內(nèi)。
-
噪聲點(diǎn):噪聲點(diǎn)是既非核心點(diǎn)也非邊界點(diǎn)的任何點(diǎn)。上圖中,點(diǎn)C是噪聲點(diǎn)。
DBSCAN算法
給定核心點(diǎn)、邊界點(diǎn)和噪聲點(diǎn)的定義,DBSCAN算法可以非正式地描述如下,任意兩個(gè)足
夠靠近(相互之間的距離在Eps之內(nèi))的核心點(diǎn)將放在同一個(gè)簇中。同樣,任何與核心點(diǎn)足夠靠近的邊界點(diǎn)也放到與核心點(diǎn)相同的簇中中,如果一個(gè)邊界點(diǎn)靠近不同簇的核心點(diǎn),則可能需要解決平局問題。噪聲點(diǎn)被丟棄。下面是實(shí)現(xiàn)步驟:
時(shí)間復(fù)雜性和空間復(fù)雜性
DBSCAN的基本時(shí)間復(fù)雜度是OOO(m*找出Eps鄰域中的點(diǎn)所需要的時(shí)間),其中m是點(diǎn)的個(gè)數(shù)。在最壞的情況下,時(shí)間復(fù)雜度是O(m2)O(m^2)O(m2).然而,在低維空間,有一些數(shù)據(jù)結(jié)構(gòu),比如kd樹,可以有效地檢索特定點(diǎn)給定距離內(nèi)的所有點(diǎn),時(shí)間復(fù)雜度將降至O(mlogm)O(mlogm)O(mlogm)。
即使對(duì)于高維數(shù)據(jù),DBSCAN的空間復(fù)雜度依然是O(m)O(m)O(m),因?yàn)閷?duì)每個(gè)點(diǎn),它只需要維持少量數(shù)據(jù),即簇標(biāo)號(hào)和每個(gè)點(diǎn)是核心點(diǎn)、邊界點(diǎn)還是噪聲點(diǎn)的標(biāo)識(shí)。
選擇DBSCAN的參數(shù)
當(dāng)然,還有如何確定Eps和MinPts的問題。基本方法是觀察點(diǎn)到它的k個(gè)最近鄰的距離(稱為k-距離)的特性。對(duì)于屬于某個(gè)簇的點(diǎn),如果k不大于簇的大小的話,則k-距離將很小(理解:因?yàn)樵谕粋€(gè)族內(nèi))。
注意,盡管因簇的密度和點(diǎn)的隨機(jī)分布不同而有一些變化,但是如果簇密度的差異不是很極端的話,在平均情況下變化不會(huì)太大,然而,對(duì)于不在簇中的點(diǎn)(如噪聲點(diǎn)),k-距離將相對(duì)較大。因此,如果我們對(duì)于某個(gè)k,計(jì)算所有點(diǎn)的k-路離,以遞增次序?qū)⑺鼈兣判?#xff0c;然后繪制排序后的值,則我們會(huì)看到k-距離的急劇變化,對(duì)應(yīng)于合適的Eps值。如果我們選取該距離為Eps參數(shù),而取k的值為MinPts參數(shù),則k-距離小Eps的點(diǎn)將被標(biāo)記為核心點(diǎn),而其他點(diǎn)將被標(biāo)記為噪聲或邊界點(diǎn)。
如果k的值太小,則少量鄰近點(diǎn)的噪聲或離群點(diǎn)將可能不正確地標(biāo)一記為簇。如果k的值太大,則小簇(尺寸小于k的簇)可能會(huì)標(biāo)記為噪聲。
R語言實(shí)踐
相關(guān)函數(shù):
library(fpc) db = dbscan(data, eps, MinPts) plotcluster(data, db$cluster)總結(jié)
以上是生活随笔為你收集整理的聚类算法(part1)--DBSCAN的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数值分析(part1)--拉格朗日插值
- 下一篇: Django从理论到实战(part23)