我使用HDBSCAN从数据集中获取软群集,如下所示:
clusterer = hdbscan.HDBSCAN(min_cluster_size=10, prediction_data=True)
clusterer.fit(data)
soft_clusters = hdbscan.all_points_membership_vectors(clusterer)
closest_clusters = [np.argmax(x) for x in soft_clusters]
soft_clusters
是数据点属于每个群集的概率的二维数组,因此closest_clusters
应该是一个数据点最可能属于的数组。但是,当我将closest_clusters
与clusterer.labels_
(HDBSCAN分配数据点的标签)进行比较时,我发现几乎没有任何群集与具有标签的数据点匹配,即数据点标签3有4个最近的集群。
我不确定我是否误解了软群集的工作方式或代码是否有问题。任何帮助表示赞赏!
答案 0 :(得分:0)
HDBSCAN的作者试图解决这个问题,但它看起来似乎只是如何运作,如果没有一些重大的重组,就没有办法解决它。以下是他的评论:
深入研究这个问题我觉得答案(不幸的是?)就是这个问题"它是如何工作的#34;软聚类考虑距样本的距离,以及点与每个聚类之间树中的合并高度。这些点最终导致错误"是位于树中的分裂点 - 它们与自己的群集具有相同的合并高度(可能这是一个错误,我将进一步研究它)。这意味着我们不能区分它们,并且就纯粹的环境距离而言,它们更接近于错误的"群集,因此得到错误分类。这有点奇怪,但软聚类最终与硬聚类有点不同,因此理论上可以发生像这样的极端情况。