1辰如、DBSCAN 算法由來
基于距離的聚類算法的聚類結(jié)果是球狀的簇,當數(shù)據(jù)集中的聚類結(jié)果是非球狀結(jié)構(gòu)時贵试,基于距離的聚類算法的聚類效果并不好琉兜。
image
與基于距離的聚類算法不同的是,基于密度的聚類算法可以發(fā)現(xiàn)任意形狀的聚類毙玻。在基于密度的聚類算法中豌蟋,通過在數(shù)據(jù)集中尋找被低密度區(qū)域分離的高密度區(qū)域,將分離出的高密度區(qū)域作為一個獨立的類別桑滩。
2夺饲、DBSCAN 算法原理
DBSCAN(Density-Based Spatial Clustering of Applications with Noise,具有噪聲的基于密度的聚類方法)是一種基于密度的空間聚類算法施符。該算法將具有足夠密度的區(qū)域劃分為簇往声,并在具有噪聲的空間數(shù)據(jù)庫中發(fā)現(xiàn)任意形狀的簇,它將簇定義為密度相連的點的最大集合戳吝。
數(shù)據(jù)點的分類.png
密度相關(guān)定義.png
圖示.png
3浩销、算法步驟
- 首選任意選取一個點,然后找到到這個點距離小于等于 eps 的所有的點听哭。如果距起始點的距離在 eps 之內(nèi)的數(shù)據(jù)點個數(shù)小于 min_samples慢洋,那么這個點被標記為噪聲。如果距離在 eps 之內(nèi)的數(shù)據(jù)點個數(shù)大于 min_samples陆盘,則這個點被標記為核心樣本普筹,并被分配一個新的簇標簽。
- 然后訪問該點的所有鄰居(在距離 eps 以內(nèi))隘马。如果它們還沒有被分配一個簇太防,那么就將剛剛創(chuàng)建的新的簇標簽分配給它們。如果它們是核心樣本酸员,那么就依次訪問其鄰居蜒车,以此類推。簇逐漸增大幔嗦,直到在簇的 eps 距離內(nèi)沒有更多的核心樣本為止酿愧。
- 選取另一個尚未被訪問過的點,并重復(fù)相同的過程邀泉。
在這幅圖里嬉挡,minPts = 4,點 A 和其他紅色點是核心點汇恤,因為它們的 ε-鄰域(圖中紅色圓圈)里包含最少 4 個點(包括自己)庞钢,由于它們之間相互相可達,它們形成了一個聚類屁置。點 B 和點 C 不是核心點焊夸,但它們可由 A 經(jīng)其他核心點可達,所以也屬于同一個聚類蓝角。點 N 是局外點阱穗,它既不是核心點,又不由其他點可達.png
4使鹅、DBSCAN 的參數(shù)選擇
- eps 設(shè)置得非常小揪阶,則意味著沒有點是核心樣本,可能會導(dǎo)致所有點被標記為噪聲
- eps 設(shè)置得非常大患朱,可能會導(dǎo)致所有點形成單個簇鲁僚。
- 雖然不需要顯示設(shè)置簇的個數(shù),但設(shè)置 eps 可以隱式地控制找到 eps 的個數(shù)。
- 使用 StandarScaler 或 MinMaxScaler 對數(shù)據(jù)進行縮放冰沙,有時更容易找到 eps 的較好取值侨艾。因為使用縮放技術(shù)將確保所有特征具有相似的范圍。
屬于簇的點是實心拓挥,噪聲點則顯示為空心唠梨,核心樣本點顯示為較大的標記,而邊界點則顯示為較小的標記.png
from sklearn.cluster import DBSCAN
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt
import mglearn
X,y=make_blobs(random_state=0,n_samples=12)
dbscan=DBSCAN()
clusters=dbscan.fit_predict(X)
# 都被標記為噪聲
print('Cluster memberships:\n{}'.format(clusters))
mglearn.plots.plot_dbscan()
plt.show()
5侥啤、Scikit-learn中的DBSCAN的使用
def __init__(self, eps=0.5, min_samples=5, metric='euclidean',
metric_params=None, algorithm='auto', leaf_size=30, p=None,
n_jobs=1):
核心參數(shù):
- eps: float当叭,?-鄰域的距離閾值
- min_samples :int,樣本點要成為核心對象所需要的 ?-鄰域的樣本數(shù)閾值
屬性:
- core_sample_indices_ : 核心點的索引盖灸,因為labels_不能區(qū)分核心點還是邊界點蚁鳖,所以需要用這個索引確定核心點
- components_:訓(xùn)練樣本的核心點
- labels_:每個點所屬集群的標簽,-1代表噪聲點
6赁炎、優(yōu)點和缺點
優(yōu)點
- 不需要用戶先驗地設(shè)置簇的個數(shù)醉箕,可以劃分具有復(fù)雜形狀的簇,還可以找出不屬于任何簇的點甘邀。
- 可以對任意形狀的稠密數(shù)據(jù)集進行聚類琅攘,相對的,K-Means之類的聚類算法一般只適用于凸數(shù)據(jù)集松邪。
- 可以在聚類的同時發(fā)現(xiàn)異常點坞琴,對數(shù)據(jù)集中的異常點不敏感。
- DBSCAN 比凝聚聚類和 k 均值稍慢逗抑,但仍可以擴展到相對較大的數(shù)據(jù)集剧辐。
缺點
- 需要設(shè)置 eps
參考鏈接
本文作為筆記記錄归形,如果侵權(quán)鞭缭,聯(lián)系我刪除