sklearn:获取点到最近聚类的距离

问题描述 投票:0回答:2

我正在使用像

DBSCAN
这样的聚类算法。

它返回一个名为

-1
的“簇”,这些点不属于任何簇。对于这些点,我想确定从它到最近的簇的距离,以获得类似于该点异常程度的度量。这可能吗?或者这种指标有什么替代方案吗?

python machine-learning scikit-learn cluster-analysis data-mining
2个回答
4
投票

答案将取决于您选择的联动策略。我将给出使用

pairwise_distances()
进行单链接的示例。

首先,您可以构建数据的距离矩阵。

from sklearn.metrics.pairwise import pairwise_distances
dist_matrix = pairwise_distances(X)

然后,您将提取最近的簇:

for point in unclustered_points:
    distances = []
    for cluster in clusters:
        distance = dist_matrix[point, cluster].min()  # Single linkage
        distances.append(distance)
    print("The cluster for {} is {}".format(point, cluster)

编辑:这有效,但正如 Anony-Mousse 指出的那样,它的时间复杂度为 O(n^2)。考虑核心点是一个更好的主意,因为它减少了你的工作量。另外,有点类似于质心联动。


1
投票

为了更接近 DBSCAN 的直觉,您可能应该只考虑核心点。

将核心点放入最近邻搜索器中。然后搜索所有噪声点,使用最近点的簇标签。

© www.soinside.com 2019 - 2024. All rights reserved.