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

Nip*_*oon 6 python k-means scikit-learn

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

Fre*_*Foo 12

如果km是k-means模型,则到j阵列中每个点的'th centroid 的距离X

d = km.transform(X)[:, j]
Run Code Online (Sandbox Code Playgroud)

这给出了一系列len(X)距离.最靠近质心的50的指数j

ind = np.argsort(d)[::-1][:50]
Run Code Online (Sandbox Code Playgroud)

所以最接近质心的50个点是

X[ind]
Run Code Online (Sandbox Code Playgroud)

(或者argpartition如果你最近有足够的NumPy,请使用,因为这样会快得多).

  • argsort 中的“-1”是不必要的,并颠倒了@mdubez 指出的顺序 (3认同)
  • 为什么您的argsort之后是“ -1”?由于您想要最短的距离,并且argsort默认为递增,因此您不应该忽略吗? (2认同)

Gum*_*ong 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]