随着scikit-learn DBSCAN中MinPts的增加,簇数增加

sky*_*ker 2 python cluster-analysis scikit-learn

我使用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
Run Code Online (Sandbox Code Playgroud)

我用scikit-learn这样:

X = StandardScaler().fit_transform(X)
db = DBSCAN(eps=eps, min_samples=min_samples, algorithm='kd_tree').fit(X)
Run Code Online (Sandbox Code Playgroud)

X是一个包含~200k 12维点的数组.

这可能是什么问题?

Fre*_*Foo 8

DBSCAN将点/样本分为三类:

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

现在,因为你需要一个更密集的核心点邻域,你得到更少的核心点,但核心点x失去其状态可以有三种效果,具体取决于其邻域之外的密度:

  1. x仍然可以从其前一个集群的核心点到达密度,其余核心点可以将集群保持在一起.集群数量保持不变.
  2. x仍然可以从至少两个核心点到达密度,但不再充当核心点之间的密度连接"桥",导致它们形成单独的簇.簇的数量增加,x被分配给另一个点的簇.
  3. 无论是X,还是其近邻点能够维持他们以前的集群,它消失了,留下X为离群点.群集数量减少.