Python 使用scikit-learn.k-means库输出距离每个聚类中心最近的50个样本

Python 使用scikit-learn.k-means库输出距离每个聚类中心最近的50个样本,python,scikit-learn,k-means,Python,Scikit Learn,K Means,我使用python scikit学习库在5000多个样本上安装了一个k-means算法。我想把离集群中心最近的50个样本作为输出。如何执行此任务?如果列表中有“到中心的距离”值,则可以使用“排序” results = [(distance_to_center, (x, y)), (distance_to_center, (x, y)), ...] results.sort() # get closest 50 closest_fifty = results[:50] 如果km是k-均值模型,则

我使用python scikit学习库在5000多个样本上安装了一个k-means算法。我想把离集群中心最近的50个样本作为输出。如何执行此任务?

如果列表中有“到中心的距离”值,则可以使用“排序”

results = [(distance_to_center, (x, y)), (distance_to_center, (x, y)), ...]
results.sort()
# get closest 50
closest_fifty = results[:50]

如果
km
是k-均值模型,则阵列
X
中每个点到
j
第四个质心的距离为

d = km.transform(X)[:, j]
这给出了
len(X)
距离的数组。最接近质心
j
的50个索引为

ind = np.argsort(d)[::-1][:50]
所以离质心最近的50个点是

X[ind]

(如果你最近有足够多的NumPy,也可以使用它,因为这要快得多)。

对@snarly的答案进行一次更正

执行
d=km.变换(X)[:,j]
后,
d
具有到
质心(j)
的距离元素,而不是相似性元素

因此,为了给出最接近的
前50个索引,您应该删除“-1”,即

ind=np.argsort(d)[::][:50]

(通常,d按升序排列距离分数。)

还有,也许是较短的方法

ind=np.argsort(d)[::-1][:50]
可能是

ind=np.argsort(d)[:-51:-1]

为什么要在argsort后面加“-1”?既然您想要最短的距离,并且argsort默认为升序,那么您不应该忽略它吗?argsort中的“-1”是不必要的,它颠倒了@mdubez所指出的顺序