DBSCAN密度聚类
基本原理
DBSCAN是具有噪声的基于密度聚类的方法,可应用于凸样本集,也可应用于非凸样本集。同一类别的样本是紧密相连的。
DBSCAN密度定义
假设样本集(D=(x_1,x_2,...,x_m)),参数((epsilon,MinPts))用来描述邻域的样本分布紧密程度,其中(epsilon)描述了某一些样本的领域距离阈值,MinPts描述了某一样本距离的距离为(epsilon)的领域中样本个数的阈值。
- (epsilon)邻域,对于(x_jin D),基(epsilon)领域包含样本集D与(x_j)的距离不大于(epsilon)的子样本集,即(N_{epsilon}(x_j)={x_iin D|distance(x_i,x_j)leepsilon}),这个子样本集的个数记为(|N_{epsilon}(x_j)|)。
- 核心对象:对于任一样本(x_jin 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()