sklearn:从点到最近的集群获得距离

时间:2017-05-18 07:31:37

标签: python machine-learning scikit-learn cluster-analysis data-mining

我正在使用像DBSCAN这样的群集算法。

它返回一个名为-1的“群集”,它们是不属于任何群集的点。对于这些点,我想确定从它到最近的簇的距离,以获得类似于这个点的异常度量的指标。这可能吗?或者这种指标有其他选择吗?

2 个答案:

答案 0 :(得分:3)

答案取决于您选择的联动策略。我将举一个单链接的例子。

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

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 :(得分:1)

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

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