DBSCAN密度聚类
DBSCAN密度聚类
基本原理
DBSCAN是具有噪声的基于密度聚类的方法,可应用于凸样本集,也可应用于非凸样本集。同一类别的样本是紧密相连的。
DBSCAN密度定义
假设样本集\(D=(x_1,x_2,...,x_m)\),参数\((\epsilon,MinPts)\)用来描述邻域的样本分布紧密程度,其中\(\epsilon\)描述了某一些样本的领域距离阈值,MinPts描述了某一样本距离的距离为\(\epsilon\)的领域中样本个数的阈值。
- \(\epsilon\)邻域,对于\(x_j\in D\),基\(\epsilon\)领域包含样本集D与\(x_j\)的距离不大于\(\epsilon\)的子样本集,即\(N_{\epsilon}(x_j)={x_i\in D|distance(x_i,x_j)\le\epsilon}\),这个子样本集的个数记为\(|N_{\epsilon}(x_j)|\)。
- 核心对象:对于任一样本\(x_j\in D\),如果基\(\epsilon\)领域对应的\(N_{\epsilon}(x_j)\)至少包含MinPts个样本,即如果\(|N_{\epsilon}(x_j)|\ge MinPts\),则\(x_j\)是核心对象。
- 密度直达:如果\(x_i\)位于\(x_j\)的\(\epsilon\)领域中,且\(x_j\)是核心对象,则称\(x_i\)由\(x_j\)密度直达。反之不一定成立,要考虑\(x_i\)是否为核心对象。
- 密度可达:对于\(x_i\)和\(x_j\)如果存在样本序列\(p_1,p_2,...,p_t\)满足\(p_1=x_i,p_t=x_j\)且\(p_{t+1}\)由\(p_t\)密度直达,则称\(x_j\)由\(x_i\)密度可达。密度可达满足传递性,此时,序列中的传递样本\(p_1,p_2,...,p_t\)均为核心对象,因为只有核心对象才能使其他样本密度直达。注意密度可达也没满足对称性,这个可由密度直达的不对称性得出。
- 密度相连:对于\(x_i\)和\(x_j\)如果存在核心对象样本\(x_k\),使\(x_i\)和\(x_j\)均由\(x_k\)密度可达,则称\(x_i\)和\(x_j\)密度相连。
DBSCAN小结
主要优点:
- 可以对任意形状的数据进行聚类
- 可以发现异常点,同时对异常点不敏感
- 聚类结果没有偏倚的
主要缺点:
- 如果样本集密度不均匀、聚类间距差距很大时,聚类质量较差,不宜用DBSCAN
- 如样本集较大,收敛时间较长
- 算法复杂,主要需要对\(\epsilon\)和MinPts联合调参。
sklearn DBSCAN使用
类库
from sklearn.cluster import DBSCAN
参数
- eps:\(\epsilon\)领域值
- min_samples:领域样本数阈值
- metirc:距离度量方式
- algorithm:推广优化算法
- leaf_size:最近邻搜索算法参数,为使用KD树或球树时使用
- p:最近邻距离度量参数
实例
import matplotlib.pyplot as plt
from sklearn.cluster import DBSCAN
y_pred = DBSCAN(n_clusters=3, random_state=9).fit_predict(x)
plt.scatter(x[:, 0], x[:, 1], c=y_pred)
plt.show()

浙公网安备 33010602011771号