在scikit学习DBSCAN中,聚类数量随着MinPts的增加而增加



我使用scikit学习库中的DBSCAN实现,得到了奇怪的结果。估计的聚类数量随着参数MinPts(min_samples)的增加而增加,根据我对算法的理解,这不应该发生。

以下是我的结果:

Estimated number of clusters:34 eps=0.9 min_samples=13.0
Estimated number of clusters:35 eps=0.9 min_samples=12.0
Estimated number of clusters:42 eps=0.9 min_samples=11.0 <- strange result here
Estimated number of clusters:37 eps=0.9 min_samples=10.0   
Estimated number of clusters:53 eps=0.9 min_samples=9.0
Estimated number of clusters:63 eps=0.9 min_samples=8.0

我使用scikit学习如下:

X = StandardScaler().fit_transform(X)
db = DBSCAN(eps=eps, min_samples=min_samples, algorithm='kd_tree').fit(X)

X是一个包含约200k个12维点的数组。

这里可能有什么问题?

DBSCAN将点/样本分为三类:

  1. 核心:生活在密集的社区,因此可能会产生集群。scikit learn实现中的min_samples是邻域密度参数
  2. 可达密度:足够靠近核心点,成为其集群的一部分
  3. 异类:所有其他

现在,由于核心点需要更密集的邻域,因此获得的核心点更少,但核心点x失去其状态可能会产生三种影响,这取决于其邻域外的密度:

  1. x仍然可以从其前一个集群的核心点达到密度,并且剩余的核心点能够将集群保持在一起。集群的数量没有变化
  2. x仍然可以从至少两个核心点达到密度,但不再充当核心点之间的密度连接"桥梁",导致它们形成单独的簇。簇的数量增加,x被指定给另一点的簇
  3. x和它的邻居点都无法维持它们以前的聚类,并且它消失了,留下x作为异常值。簇的数量会减少

相关内容

  • 没有找到相关文章

最新更新