sklearn:获取点到最近集群的距离
sklearn: Get Distance from Point to Nearest Cluster
我正在使用像 DBSCAN
这样的聚类算法。
它 returns 一个叫做 -1
的 'cluster' 是不属于任何簇的点。对于这些点,我想确定它到最近集群的距离,以获得类似该点异常程度的度量标准。这可能吗?或者这种指标是否有任何替代方案?
答案将取决于您选择的联动策略。我举个单联动的例子。
首先,您可以构建数据的距离矩阵。
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)。考虑核心点是一个更好的主意,因为它可以减少你的工作量。另外,它有点类似于centroid linkage。
为了更接近 DBSCAN 的直觉,您可能应该只考虑 核心 点。
将核心点放入最近邻搜索器中。然后搜索所有噪声点,使用最近点的聚类标签。
我正在使用像 DBSCAN
这样的聚类算法。
它 returns 一个叫做 -1
的 'cluster' 是不属于任何簇的点。对于这些点,我想确定它到最近集群的距离,以获得类似该点异常程度的度量标准。这可能吗?或者这种指标是否有任何替代方案?
答案将取决于您选择的联动策略。我举个单联动的例子。
首先,您可以构建数据的距离矩阵。
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)。考虑核心点是一个更好的主意,因为它可以减少你的工作量。另外,它有点类似于centroid linkage。
为了更接近 DBSCAN 的直觉,您可能应该只考虑 核心 点。
将核心点放入最近邻搜索器中。然后搜索所有噪声点,使用最近点的聚类标签。