Python HDBSCAN';t群集中的任何对象都有一个概率值>;0? 并产生不一致的结果

Python HDBSCAN';t群集中的任何对象都有一个概率值>;0? 并产生不一致的结果,python,jupyter-notebook,hdbscan,Python,Jupyter Notebook,Hdbscan,我正在使用hdbscan在pythonjupyter笔记本的数据集中查找集群 import pandas as pandas import numpy as np data = pandas.read_csv('data.csv') 这些数据如下所示: 耶!一切似乎都正常 然后我想看到一些结果,所以我将这些结果添加到我的数据框中: data.insert(18,"labels",clusterer.labels_) data.insert(19,"probabi

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

import pandas as pandas
import numpy as np
data = pandas.read_csv('data.csv')
这些数据如下所示:

耶!一切似乎都正常

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

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)
我检查
cluster.labels和
cluster.probability的值,它们是不同的。这不是应该是一致的吗?为什么这些价值观会改变?有什么隐藏的状态没有告诉我吗?但是现在我的
聚类器。概率值在0到1之间。。。那很好,对吧

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

根据API:

  • 标签:为fit()指定的数据集中每个点的群集标签。噪声样本的标签为-1
  • 概率:每个样本作为其指定集群成员的强度。噪声点的概率为零;簇中的点具有与它们作为簇的一部分保持的程度成比例的值
因此,零概率是有意义的。 我还期望在同一数据上不同运行的结果是相同的,但看起来这并不完全正确。根据维基:

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

因此,选择特定的算法可能有助于解决集群的确定性问题。

在我的例子中,我得到的标签概率不是-1,可能是因为数据元素也只有0/1。想象一个正方形。你有四个分数(0,0),(0,1),(1,0),(1,1)。但是,对于一个正方形来说,真正意义上的聚类是没有意义的,你可以用不同的方法来做,所有的方法都是一样的。三维等效物(立方体)也一样。每个维度中的数据元素仅为0/1,可能不太适合集群工作。你尝试过其他聚类方法吗?或者,换句话说,如果你有分类数据(看起来你有),基于欧几里德距离的算法就没有多大意义。分类数据建议使用K模式:这些都是非常好的观点,谢谢@Shahriar49
clusterer = hdbscan.HDBSCAN(min_cluster_size=clusterSize).fit(data)