我正在使用像DBSCAN
这样的聚类算法。
它返回了一个名为-1
的“聚类”,这些是没有属于任何聚类的点。对于这些点,我希望确定它们到最近聚类的距离,以便获得一个衡量这些点异常程度的指标。这是可能的吗?或者有没有替代的指标方法?
回答:
答案将取决于你选择的连接策略。我将以单连接为例进行说明。
首先,你可以构建数据的距离矩阵。
from sklearn.metrics.pairwise import pairwise_distancesdist_matrix = pairwise_distances(X)
然后,你将提取最近的聚类:
for point in unclustered_points: distances = [] for cluster in clusters: distance = dist_matrix[point, cluster].min() # 单连接 distances.append(distance) print("The cluster for {} is {}".format(point, cluster)
编辑:这有效,但正如Anony-Mousse指出的,它是O(n^2)的。考虑核心点是一个更好的主意,因为它可以减少你的工作量。此外,这与质心连接有些相似。