機器學習(2):DBSCAN聚類演算法
一、DBSCAN演算法基本概念
1.全稱:Density-Based Spatial Clustering of Applications with Noise 基於密度帶有噪聲聚類
2.核心物件:若某個點的密度達到演算法設定的閾值則其為核心點。
(即某點的r 鄰域內,點的數量不小於設定閾值 minPoints)
3.半徑r:鄰域的距離閾值:設定的半徑r
4.直接密度可達:若某點p在點q的 r 鄰域內,且q是核心點則p-q直接密度可達。
5.密度可達:若有一個點的序列q0、q1、…qk,對任意qi到qi-1是直接密度可達的,則稱從q0到qk密度可達,這實際上是直接密度可達的“傳播”。
6.密度相連:若從某核心點p出發,點q和點k都是密度可達的,則稱點q和點k是密度相連的。
7.邊界點:屬於某一個類的非核心點,不能發展下線了
8.噪聲點(離群點):不屬於任何一個類簇的點,從任何一個核心點出發都是密度不可達的
二、工作流程
1.輸入
(1)引數D:輸入資料集
(2)引數r:指定半徑
(3)MinPts:密度閾值
引數選擇解釋:
-》半徑r,可以根據K距離來設定:找突變點
K距離:給定資料集P={p(i); i=0,1,…n},計算點P(i)到集合D的子集S中所有點
之間的距離,距離按照從小到大的順序排序,d(k)就被稱為k-距離。
-》MinPts: k-距離中k的值,一般取的小一些,多次嘗試
2.標記所有點為unvisit
3.隨機選擇一個unvisit點p,作為c1簇,發展下線。
4.發展下線:繪製p的鄰域r,對於鄰域中滿足核心點條件的點,就把該點歸類為c1
5.把訪問過的點都標記為visit,然後從3步迴圈,找到c2,c3...類,直到所有點都為visit為止。
三、優勢和劣勢
1.優勢
(1)不需要指定簇個數
(2)可以發現任意形狀的簇
(3)擅長找到離群點(檢測任務)
(4)兩個引數就夠了
2.劣勢
(1)高維資料有些困難(可以做降維)
(2)引數難以選擇(引數對結果的影響非常大)
(3)Sklearn中效率很慢(資料削減策略)
四、例項
1.匯入
from sklearn.cluster import DBSCAN
db = DBSCAN(eps=10, min_samples=2).fit(X)
3.分類結果
labels = db.labels_
結果:
[ 0 0 0 -1 0 0 -1 0 1 -1 0 1 0 0 0 2 0 0 2 1]
3.新增到資料最後,並且排序
beer['cluster_db'] = labels
beer.sort_values('cluster_db')
4.求取中心值
beer.groupby('cluster_db').mean()
5.檢視兩兩特徵的關係
pd.scatter_matrix(X, c=colors[beer.cluster_db], figsize=(10,10), s=100)