我已经使用Python中的scikit-learn库在5000多个样本上运行了一个k-means算法。 我想要输出50个最接近聚类中心的样本。 我如何执行此任务?
我已经使用Python中的scikit-learn库在5000多个样本上运行了一个k-means算法。 我想要输出50个最接近聚类中心的样本。 我如何执行此任务?
km
是k-means模型,那么对于数组X
中的每个点,到第j
个质心的距离为:d = km.transform(X)[:, j]
len(X)
的距离数组。与质心j
最接近的50个索引是:ind = np.argsort(d)[::-1][:50]
因此,到质心最近的50个点是
X[ind]
argpartition
,因为它更快)@snarly的回答有一个错误需要更正。
在执行d = km.transform(X)[:, j]
之后,
d
的元素是到centroid(j)
的距离而不是相似度。
因此,为了给出最接近的前50个索引
,您应该删除“-1”,即
ind = np.argsort(d)[::][:50]
(通常,d具有按升序排列的距离得分。)
另外,也许更简短的方法是:
ind = np.argsort(d)[::-1][:50]
可以写成
ind = np.argsort(d)[:-51:-1]
。
results = [(distance_to_center, (x, y)), (distance_to_center, (x, y)), ...]
results.sort()
# get closest 50
closest_fifty = results[:50]