DBSCAN密度聚类

DBSCAN密度聚类

基本原理

DBSCAN是具有噪声的基于密度聚类的方法,可应用于凸样本集,也可应用于非凸样本集。同一类别的样本是紧密相连的。

DBSCAN密度定义

假设样本集\(D=(x_1,x_2,...,x_m)\),参数\((\epsilon,MinPts)\)用来描述邻域的样本分布紧密程度,其中\(\epsilon\)描述了某一些样本的领域距离阈值,MinPts描述了某一样本距离的距离为\(\epsilon\)的领域中样本个数的阈值。

  1. \(\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)|\)
  2. 核心对象:对于任一样本\(x_j\in D\),如果基\(\epsilon\)领域对应的\(N_{\epsilon}(x_j)\)至少包含MinPts个样本,即如果\(|N_{\epsilon}(x_j)|\ge MinPts\),则\(x_j\)是核心对象。
  3. 密度直达:如果\(x_i\)位于\(x_j\)\(\epsilon\)领域中,且\(x_j\)是核心对象,则称\(x_i\)\(x_j\)密度直达。反之不一定成立,要考虑\(x_i\)是否为核心对象。
  4. 密度可达:对于\(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\)均为核心对象,因为只有核心对象才能使其他样本密度直达。注意密度可达也没满足对称性,这个可由密度直达的不对称性得出。
  5. 密度相连:对于\(x_i\)\(x_j\)如果存在核心对象样本\(x_k\),使\(x_i\)\(x_j\)均由\(x_k\)密度可达,则称\(x_i\)\(x_j\)密度相连。

DBSCAN小结

主要优点:

  1. 可以对任意形状的数据进行聚类
  2. 可以发现异常点,同时对异常点不敏感
  3. 聚类结果没有偏倚的

主要缺点:

  1. 如果样本集密度不均匀、聚类间距差距很大时,聚类质量较差,不宜用DBSCAN
  2. 如样本集较大,收敛时间较长
  3. 算法复杂,主要需要对\(\epsilon\)和MinPts联合调参。

sklearn DBSCAN使用

类库

from sklearn.cluster import DBSCAN

参数

  1. eps:\(\epsilon\)领域值
  2. min_samples:领域样本数阈值
  3. metirc:距离度量方式
  4. algorithm:推广优化算法
  5. leaf_size:最近邻搜索算法参数,为使用KD树或球树时使用
  6. 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()
posted @ 2020-05-13 15:23  hi_heisen  阅读(210)  评论(0)    收藏  举报