0

我正在使用 hdbscan 在 Python Jupyter 笔记本的数据集中查找集群。

import pandas as pandas
import numpy as np
data = pandas.read_csv('data.csv')

该数据看起来像这样:

数据

import hdbscan
clusterSize = 6
clusterer = hdbscan.HDBSCAN(min_cluster_size=clusterSize).fit(data)

耶!一切似乎都奏效了!

所以我想看到一些结果,所以我将这些结果添加到我的数据框中:

data.insert(18,"labels",clusterer.labels_)
data.insert(19,"probabilities",clusterer.probabilities_)

但是等等,我有带有标签的行,这些行带有概率为 0 的集群的标签。这有什么意义?集群中的任何对象不应该具有 > 0 的概率值吗?哦,所有的概率都只有 0 或 1。

所以我在 Jupyter notebook 中重新运行,具体来说,我只是重新运行

clusterer = hdbscan.HDBSCAN(min_cluster_size=clusterSize).fit(data)

clusterer.labels_我检查了and的值clusterer.probabilities_,它们是不同的。这件事不应该是一致的吗?为什么这些价值观会改变?是否有一些我没有被告知的隐藏状态?但是现在我clusterer.probabilities_的值介于 0 和 1 之间……所以这很好,对吧?

所以我显然对这个 hdbscan 工具不是很熟悉,但是有人可以解释为什么它在多次运行时会给出不同的答案,以及标记/聚集对象上的概率 0 是否有意义?

4

1 回答 1

0

根据 API:

  • 标签:给 fit() 的数据集中每个点的聚类标签。嘈杂的样本被赋予标签-1。
  • 概率:每个样本作为其指定集群成员的强度。噪声点的概率为零;集群中的点的值与它们作为集群的一部分持续存在的程度成正比。

因此,零概率是有意义的。我还期望在相同数据上不同运行的结果是相同的,但看起来并不完全正确。根据维基:

  • DBSCAN 不是完全确定的:从多个集群可到达的边界点可以是任一集群的一部分,具体取决于数据处理的顺序。对于大多数数据集和领域,这种情况并不经常出现,对聚类结果影响不大:[4]无论是在核心点还是噪声点上,DBSCAN都是确定性的。DBSCAN* 是一种将边界点视为噪声的变体,这种方式可以实现完全确定的结果以及对密度连接分量的更一致的统计解释。

因此,也许选择特定算法将有助于确定聚类。

于 2020-11-19T20:18:17.403 回答