【问题标题】:Scipy.cluster kmeans2Scipy.cluster kmeans2
【发布时间】:2019-03-02 11:41:03
【问题描述】:

我正在尝试在 Scipy 中应用 kmeans2 算法。以下代码正确应用了该算法。

from scipy.cluster.vq import kmeans2,vq
import numpy as np

df = pd.read_csv("123.csv")

km,_ = kmeans2(X,2)
idx,_ = vq(X,km)

如何观察聚类中心?我尝试过 print(centers)、print(centroids) 等,但没有任何效果。

如何观察集群标签?例如,在 sklearn KMeans 中,这是由 labels_ 给出的。

我已经尝试了 print(labels) 和它的所有变体,我在 Scipy 参考指南上找到了这些,但似乎没有一个有效。

此外,在初始化方法下,它声明矩阵是 minit 中的可用方法。我无法识别我输入的任何矩阵。 我通常会收到一条错误消息,说“数据类型不被理解”或“不可散列的类型:'list'。

我之所以尝试这样做是因为我想运行一个 KMeans 聚类算法,我可以在其中手动选择每个聚类中心,然后将每个点分类到最近的中心。

我只是不明白“minit”是如何工作的,还是我只是没有以正确的形式输入我的矩阵

【问题讨论】:

  • 你能显示一些数据吗? km 长什么样子?

标签: python scipy cluster-analysis k-means


【解决方案1】:

km 应该包含集群中心。试试看

打印(公里)

至于标签,应该是kmeans2返回的第二个变量。

这是一个工作示例:

df = [[1.,2.,3.], [7.,8.,9.], [2.,2.,2.], [7.,8.,6.]]

centers,labels = kmeans2(df,2) 
print(centers) 
print(labels)

结果:

[[1.5 2.  2.5]
 [7.  8.  7.5]]
[0 1 0 1]

【讨论】:

  • 感谢您的回答,它有效。然而,每次我运行这个算法时,聚类都是不同的(因此聚类中心也是不同的)。如何判断哪个聚类是最佳的,或者我需要为迭代次数设置一个非常高的数字?
  • KMeans 随机放置初始聚类中心,因此您没有得到相同的结果是可以接受的。从多次运行中,您可以将误差测量值计算为每个点到其簇质心的均方距离。最小化这个误差的聚类结果是最好的。 sklearn.cluster.kmeans 通过其设置为 10 的 n_init 参数自动执行此操作,它提供了 10 个中的最佳结果:scikit-learn.org/stable/modules/generated/…
  • @CatalinStoean 每次获得相同结果的一种方法是在 kmeans 代码之前设置一个初始种子值。我不知道它在 python 中是如何完成的,但在 R 编程中,它可以编码为>set.seed(2018) kmeans(c(1:10))
  • @nemo 好点。但您不一定能从多种可能中得到最佳解决方案。无论如何,为了在 python 中做到这一点,这应该没问题: > from numpy import random >random.seed(5)
  • @CatalinStoean 谨慎使用术语,“最佳解决方案”和“相同结果(或解决方案)”是两个不同的概念。需要明确的是,我的建议是获得“相同的结果”。
猜你喜欢
  • 2010-12-11
  • 2015-01-29
  • 1970-01-01
  • 2013-12-14
  • 2014-10-07
  • 2014-01-06
  • 2012-11-07
  • 1970-01-01
  • 2011-01-05
相关资源
最近更新 更多