使用scikit-learn.k-means库输出最接近每个集群中心的50个样本

时间:2014-11-07 06:39:46

标签: python scikit-learn k-means

我使用python scikit-learn库在5000多个样本上拟合了k-means算法。我希望最接近集群中心的50个样本作为输出。我该如何执行此任务?

3 个答案:

答案 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]