我一直在用(x,y)点"point_coord“的一个小实例测试scikit包中的hdbscan,结果得到的集群对我来说并不是很有意义。考虑到样本的小尺寸,我允许使用单个集群。
我预计会有两个集群:第4点和第5点聚在一起,而其余的点是点。
point_coord=[[0,0],[1,1],[0,1],[50,40],[50,45],[2,3],[1,2]]
test=pairwise_distances(point_coord)
clusterer= hdbscan.HDBSCAN( allow_single_cluster=True,
metric='precomputed')
clusterer.fit(test)但是,生成的clusterer.labels是:
1,0,0,0,-1,0,0
发布于 2019-08-19 22:42:59
您需要考虑的事情很少:
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()输出:

发布于 2019-08-14 13:45:49
你能不能试试:
from sklearn.cluster import KMeans
import numpy as np
X = np.array(point_coord)
kmeans = KMeans(n_clusters=2, random_state=0).fit(X)
kmeans.labels_输出:array([1,1,1,0,0,1,1])
我同意应该是这样的:(0,0,0,1,1,0,0)
https://stackoverflow.com/questions/57478527
复制相似问题