我使用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作为其最接近的集群。
我不确定是我误解了软集群的工作原理,还是代码有问题。如有任何帮助,我们不胜感激!
发布于 2018-06-08 22:01:38
HDBSCAN的作者曾试图解决这个问题,但目前看来,这只是它的工作方式,如果不进行一些重大的重组,就没有办法解决它。以下是他的评论:
深入研究这一点,我认为答案(不幸的是?)这就是“它是如何工作的”。软聚类考虑到样本的距离,以及树中点和每个聚类之间的合并高度。这些最终“错误”的点是位于树中一个分割点上的点--它们与自己的集群具有相同的合并高度(也许这是一个bug,我将进一步研究它)。这意味着我们不会在树上区分它们,就样本的纯环境距离而言,它们更接近“错误”的集群,因此被错误分类。这有点奇怪,但软聚类与硬聚类在根本上略有不同,所以理论上可能会出现类似这样的角落情况。
https://stackoverflow.com/questions/44937157
复制