您需要考虑以下几点:
1 - HDBSCAN 是一种噪声感知聚类算法。因此,输出中的 -1 结果是被视为异常值并从聚类中排除的数据。从
文档
重要的是 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)
请参阅文档(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()
输出: