Python Scipy.cluster kmeans2

Python Scipy.cluster kmeans2,python,scipy,cluster-analysis,k-means,Python,Scipy,Cluster Analysis,K Means,我正在尝试在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) 我如何观察集群中心?我尝试过打印(中心),打印(质心)等,但没有任何效果 如何观察群集标签?例如,在sklearn KMeans中,这由标签给出 我已经尝试过打印(标签

我正在尝试在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)
我如何观察集群中心?我尝试过打印(中心),打印(质心)等,但没有任何效果

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

我已经尝试过打印(标签)和它的所有变体,我在Scipy参考指南中找到了它们,但似乎没有一个有效

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

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


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

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]

你能展示一些数据吗?
km
看起来怎么样?谢谢你的回答,它是有效的。但是,每次我运行这个算法时,聚类都是不同的(因此聚类中心也不同)。我如何判断哪一个群集是最优化的,或者我需要为迭代次数设置一个非常高的数字?KMeans随机放置初始群集中心,因此可以接受的是,您不会得到相同的结果。从多次运行中,您可以将误差度量计算为每个点到目标的均方距离它的群集质心。最小化此错误的群集结果是最好的。sklearn.cluster.kmeans通过其设置为10的n_init参数自动执行此操作,并提供10个参数中的最佳结果:@catalinstoe每次获得相同结果的一种方法是在kmeans代码之前设置初始种子值。我不知道如何设置它在python中完成,但在R编程中,它可以被编码为
>set.seed(2018)kmeans(c(1:10))
@nemo很好。但是你不一定能从几种可能的解决方案中得到最好的解决方案。无论如何,为了在python中做到这一点,这应该是很好的:>来自numpy import random>random.seed(5)@catalinstoE仔细使用术语,”“最佳解决方案”和“相同的结果(或解决方案)”是两个不同的概念。我的建议是为了获得“相同的结果”。