【问题标题】:Number of clusters increased with the increase of MinPts in scikit-learn DBSCANscikit-learn DBSCAN 中的簇数随着 MinPts 的增加而增加
【发布时间】:2014-03-18 07:16:39
【问题描述】:

我使用来自 scikit-learn 库的 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-learn 的:

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

X 是一个包含约 20 万个 12 维点的数组。

这可能是什么问题?

【问题讨论】:

  • 您可能想看看 OPTICS(not 在 python 中可用。您在 Google 中找到的 python OPTICS 实现是不正确的;本质上是它的DBSCAN 再次)。它的工作方式类似于 DBSCAN,但您不必选择 epsilon。 ELKI 具有良好的 OPTICS 实现,具有索引支持。

标签: python cluster-analysis scikit-learn


【解决方案1】:

DBSCAN 将点/样本分为三类:

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

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

  1. x 仍然可以从其先前集群的核心点进行密度可达,并且剩余的核心点能够将集群保持在一起。集群数量不变。
  2. x 仍然可以从至少两个核心点进行密度可达,但不再充当核心点之间的密度连接“桥梁”,导致它们形成单独的集群。集群数量增加,x 被分配到另一个点的集群。
  3. x 及其相邻点都无法维持它们以前的集群并消失,留下 x 作为异常值。集群数量减少。

【讨论】:

    猜你喜欢
    • 2015-07-11
    • 2020-03-21
    • 1970-01-01
    • 2018-01-29
    • 1970-01-01
    • 2021-05-31
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    相关资源
    最近更新 更多