您需要考虑的事项很少:
1 - HDBSCAN 是一种噪声感知聚类算法。因此,输出中的 -1 结果是被视为异常值并从聚类中排除的数据。
从
Documentation
重要的是,HDBSCAN 具有噪声感知能力——它具有数据样本的概念
没有分配给任何集群。这是通过分配来处理的
这些样本标签 -1
2 - 数据集非常小,未设置 min_samples 和 min_cluster_size 参数。因此 HDBSCAN 使用默认参数,将最小集群大小设置为 5。您可以在 clusterer.fit(distance_matrix) 命令的输出中查看使用的参数。
HDBSCAN(algorithm='best', allow_single_cluster=False, alpha=1.0,
approx_min_span_tree=True, cluster_selection_method='eom',
core_dist_n_jobs=4, gen_min_span_tree=False, leaf_size=40,
match_reference_implementation=False, memory=Memory(location=None),
metric='precomputed', min_cluster_size=5, min_samples=None, p=None,
prediction_data=False)
请参阅文档(Parameter Selection for HDBSCAN) 了解如何正确配置算法。
这是您的代码的更正版本,带有集群树状图。
point_coord=[[0,0],[1,1],[0,1],[50,40],[50,45],[2,3],[1,2]]
distance_matrix=pairwise_distances(point_coord)
clusterer= hdbscan.HDBSCAN(metric='precomputed', min_samples=1,min_cluster_size=2)
clusterer.fit(distance_matrix)
print(clusterer.labels_)
clusterer.single_linkage_tree_.plot()
输出: