我有一个包含6个元素的数据集。我使用Gower distance计算了距离矩阵,得出了以下矩阵:
只要看一下这个矩阵,我就可以知道元素#0与元素#4和#5最为相似,所以我假设HDBSCAN的输出是将它们聚集在一起,并假设其余的是异常值;然而,事实并非如此
clusterer = hdbscan.HDBSCAN(min_cluster_size=2, min_samples=3, metric='precomputed',cluster_selection_epsilon=0.1, cluster_selection_method = 'eom').fit(distance_matrix)
形成的集群:
簇0:{element#0,element#2}
集群1:{element#4,element#5}
异常值:{element#1,element#3}
这是我不理解的行为。另外,参数cluster_selection_epsilon
和cluster_selection_method
似乎对我的结果没有任何影响,我不明白为什么
我尝试再次将参数更改为min_cluster_size=2, min_samples=1
形成的集群:
簇0:{element#0,element#2,element#4,element#5}
集群1:{element#1,element#3}
参数的任何其他变化都会导致将所有点归类为异常值
请有人解释一下这种行为,解释一下为什么cluster_selection_epsilon
和cluster_selection_method
不影响所形成的集群。我认为通过将cluster_selection_epsilon
设置为0.1,可以确保簇内的点之间的距离为0.1或更小(例如,元素#0和元素#2不会聚集在一起)
如help page中所述,hdbscan的核心是1)计算相互可达距离和2)应用单连杆算法。由于您没有那么多的数据点,并且距离度量是预先计算的,因此可以看到您的群集由单个链接决定:
结果将是:
因为集群的最小数量必须是2。所以实现这一点的唯一方法是将元素0,2,4,5放在一起
一个快速的解决方案是简单地切割树并获得您想要的集群:
或者您只需使用sklearn.cluster.aggregativeclustering中的内容,因为您不依赖hdbscan来计算距离度量
相关问题 更多 >
编程相关推荐