我使用python scikit-learn库在5000多个样本上拟合了k-means算法。我希望最接近集群中心的50个样本作为输出。我该如何执行此任务?
答案 0 :(得分:12)
如果km
是k-means模型,则数组j
中每个点与X
'\ n \ n \ n质心的距离为
d = km.transform(X)[:, j]
这给出了len(X)
距离的数组。最接近质心j
的50的索引是
ind = np.argsort(d)[::-1][:50]
所以最靠近质心的50个点是
X[ind]
(或者如果您有最近的NumPy,请使用argpartition
,因为它的速度要快得多。)
答案 1 :(得分:5)
对@ snarly的回答进行了一次修正。
执行d = km.transform(X)[:, j]
后,
d
包含距离到centroid(j)
的元素,而不是相似之处。
所以为了给出最接近的top 50 indices
,你应该删除' -1' ,即
ind = np.argsort(d)[::][:50]
(通常,d按升序排序距离得分。)
另外,也许是更短的做法
ind = np.argsort(d)[::-1][:50]
可能是
ind = np.argsort(d)[:-51:-1]
。
答案 2 :(得分:0)
如果您在列表中有中心值的距离,则可以使用sort。
results = [(distance_to_center, (x, y)), (distance_to_center, (x, y)), ...]
results.sort()
# get closest 50
closest_fifty = results[:50]