将 HDBSCAN 标签与软聚类结果进行比较
Posted
技术标签:
【中文标题】将 HDBSCAN 标签与软聚类结果进行比较【英文标题】:Comparing HDBSCAN labels with soft cluster results 【发布时间】:2017-12-09 18:25:09 【问题描述】:我正在使用 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 作为它最近的集群。
我不确定我是否误解了软集群的工作原理,或者代码是否有问题。任何帮助表示赞赏!
【问题讨论】:
我不记得 HDBSCAN* 论文中的类似内容了……这有什么理论支持? 我认为这是一个相对较新的功能。这里有一个例子:hdbscan.readthedocs.io/en/latest/soft_clustering.html,它是如何工作的解释在这里:hdbscan.readthedocs.io/en/latest/… 我指的是已发表的对该方法的理论支持。破解 HDBSCAN* 的一些“模糊”变体很容易,但这并不意味着它在统计上是合理的。 这可能是由于这个错误:github.com/scikit-learn-contrib/hdbscan/issues/123 是的,我在问了这个问题后提出了这个问题——我根据我的发现重新映射,它对我有用,但基于其他一些 cmets,行为似乎不是一致。 【参考方案1】:HDBSCAN 的作者试图解决这个问题,但目前看来,这只是它的工作方式,如果不进行一些重大重组,就无法解决它。这是他的评论:
深入研究这一点,我认为答案(不幸的是?)是“它就是这样工作的”。软聚类考虑到样本的距离,以及树中点和每个聚类之间的合并高度。这些最终“错误”的点是位于树中拆分的点——它们与自己的集群具有相同的合并高度(也许这是一个错误,我会进一步研究)。这意味着在树上我们不区分它们,并且就与样本的纯环境距离而言,它们更接近“错误”的集群,因此被错误分类。这有点奇怪,但是软聚类最终与硬聚类有一点不同,所以理论上会出现这样的极端情况。
【讨论】:
以上是关于将 HDBSCAN 标签与软聚类结果进行比较的主要内容,如果未能解决你的问题,请参考以下文章