Python 使用scikit-learn.k-means库输出距离每个聚类中心最近的50个样本
我使用python scikit学习库在5000多个样本上安装了一个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-均值模型,则
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所指出的顺序