HDBSCAN集群中的任何对象都不应该具有> 0的概率值吗?并产生不一致的结果

问题描述

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

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

数据看起来像这样:

data

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笔记本中重新运行它,具体地说,我只是重新运行

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

,然后检查clusterer.labels_clusterer.probabilities_的值,它们是不同的。这件事不应该是一致的吗?为什么这些价值观会改变?有没有我不被告知的隐藏状态?但是现在我的clusterer.probabilities_的值在0到1之间...这是对的吗?

因此,我显然对这个hdbscan工具不是很熟悉,但是有人可以解释为什么当多次运行并且如果标记/聚集对象的概率为0时,它给出不同的答案吗?

解决方法

根据API:

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

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

  • DBSCAN并不是完全确定的:可以从多个群集中到达的边界点可以是任一群集的一部分,具体取决于数据处理的顺序。对于大多数数据集和域,这种情况很少出现,并且对聚类结果影响很小:[4]对于核心点和噪声点,DBSCAN都是确定性的。 DBSCAN *是一种将边界点视为噪声的变体,它可以实现完全确定的结果,并且可以更一致地统计密度相关组件。

因此也许选择一种特定的算法将有助于确定性地解决聚类问题。