十六.DBSCAN聚类原理和sklearn实现

目录

  • 1.基本概念
  • 2.算法流程
  • 3.sklearn实现DBSCAN
    • (1)数据集
    • (2)kmeans
    • (3)DBSCAN

1.基本概念

DBSCAN:具有噪声的基于密度的聚类方法。从名字中就可以看出来,簇划分是根据样本密度来决定的。
ϵ ϵ ϵ-邻域:样本 x x x ϵ ϵ ϵ为半径的范围内包含的所有样本的集合,这个集合称为 x x x ϵ ϵ ϵ-邻域。
核心对象:样本 x x x的ϵ-领域内样本数大于阈值MinPts,则 x x x为核心对象。
直接密度可达:若某点 p p p在点 q q q ϵ ϵ ϵ-邻域内,且 q q q是核心对象,则 p p p q q q直接密度可达。
密度可达:有序列点 q 1 , q 2 , q 3 , . . . , q k q_{1},q_{2},q_{3},...,q_{k} q1,q2,q3,...,qk,其中, q t q_{t} qt q t − 1 q_{t-1} qt1直接密度可达,则称 q k q_{k} qk q 0 q_{0} q0密度可达。
密度相连:若从某核心点 p p p出发,点 q q q和点 k k k都是和 p p p密度可达的 ,则称点 q q q和点 k k k是密度相连的。
明白了以上概念,就明白了DBSCAN的基本思想:由密度可达导出的最大密度相连的集合作为一个簇。

2.算法流程

(1)将所有的样本标记为未访问状态。

(2)随机选择一个未访问对象 p p p,将其标记为已访问。

(3)如果 p p p为核心对象,创建一个新簇 C C C,将 p p p ϵ ϵ ϵ-邻域添加到 C C C中。

(4)对于 C C C中的每一个样本 q q q,如果 q q q为核心对象,遍历其 ϵ ϵ ϵ-邻域内的所有样本 x x x

a.如果 x x x未被访问,则标记为已访问,将 x x x添加到 C C C中。

b.如果 x x x已被访问但是不属于任何一个簇,将 x x x添加到 C C C中。

c.对 C C C中的每个元素重复步骤a、b。

(5)重复(2)到(4),直到没有未被访问的样本。

(6)输出所有簇划分。

3.sklearn实现DBSCAN

(1)数据集

生成数据。3000个样本,内外比例为0.3,高斯噪声为0.05。

from sklearn.datasets import make_circles
import matplotlib.pylab as plt
x,y=make_circles(n_samples=3000,factor=0.3,noise=0.05)
plt.scatter(x[:,0],x[:,1])
plt.show()

十六.DBSCAN聚类原理和sklearn实现_第1张图片

(2)kmeans

使用2个质心的kmeans算法

from sklearn.cluster import KMeans
model1 = KMeans(n_clusters=2)
y_pred = model1.fit_predict(x)
plt.scatter(x[:,0],x[:,1],c=y_pred)
plt.show()

十六.DBSCAN聚类原理和sklearn实现_第2张图片

(3)DBSCAN

使用邻域为0.2的DBSCAN算法

使用邻域为0.2的DBSCAN算法
from sklearn.cluster import DBSCAN
y_pred2 = DBSCAN(eps=0.2).fit_predict(x)
plt.scatter(x[:,0],x[:,1],c=y_pred2)
plt.show()

十六.DBSCAN聚类原理和sklearn实现_第3张图片

你可能感兴趣的:(机器学习实战,机器学习理论基础)