Python 一类kmean聚类

Python 一类kmean聚类,python,module,scalar,Python,Module,Scalar,我试着在python2.7中用矩阵20*20运行这段代码,我想得到两个集群,就像kmean算法一样 js 将numpy导入为np filename=np.genfromtxt('Matrix.txt') M=np.sort(np.random.choice(2,20)) ##m=np.copy(m)=>我在那里得到一个错误:“module”对象不可调用 M=M#这个选项效果更好,但我不确定它是否合适 #集群的初始化 C={} 对于X范围内的t(tmax=100): #簇的测定 J=np.mea

我试着在python2.7中用矩阵20*20运行这段代码,我想得到两个集群,就像kmean算法一样

js

将numpy导入为np
filename=np.genfromtxt('Matrix.txt')
M=np.sort(np.random.choice(2,20))
##m=np.copy(m)=>我在那里得到一个错误:“module”对象不可调用
M=M#这个选项效果更好,但我不确定它是否合适
#集群的初始化
C={}
对于X范围内的t(tmax=100):
#簇的测定
J=np.mean(文件名[:,M],轴=1)
对于范围(2)内的k:
C[k]=np.where(J==k,0,0)#np.where(J==k)=>另一个“np.where”错误:它只接受三个参数,但只接受一个参数。我发现它只能接受一个参数
#更新
对于范围(2)内的k:
J=np.mean(文件名[np.ix_389;(C[k],C[k])),轴=1)
j=np.argmin(j)
m[k]=C[k][j]#[j]=>“[j]”的另一个错误:标量变量的索引无效
#结果
打印M,C
另一个变体(它使用scikit库):


代码有多个问题,
M
被初始化为数组,之后该数组被更改为未知的
M
,tmax未定义。您需要
m=m.copy()
,但实际操作是
m=m
。为什么这么说?在k_中,表示需要计算两个向量之间的距离@valentin‘tmax’指的是迭代次数,a希望复制‘M’,以便添加更多条件,然后保存第一个版本。这并不完全是kmean:我的矩阵已经是一个来自文档的欧几里德距离矩阵:
where(条件[x,y])返回元素,根据条件从x或y返回,所以where总是精确返回0,但如果没有条件,我无法运行代码,所以我只是为了更好地查看我的错误而尝试了它。你知道我怎样才能得到预期的结果吗?你把J算作平均值,我想这些平均值既不是0也不是1,所以你的
where
将返回空数据,它无法工作。假设程序在我的20*20值之间进行选择,只有“2”值;就像k_均值算法一样。这个“2”的值是最接近其他的,它们可以被视为平均值。在这个例子中:这个簇的平均值[1,2,3,4,5,6,7,8,9]是4,5。因此,程序应该运行并选择所有与此最接近的值。不幸的是,我无法在我现在使用的服务器上下载新包。几个小时后我会在自己的电脑上检查。我会回来给你一个答案。谢谢你的帮助嗨,我回来了。我有一个错误。。。。ValueError:n_samples=1应大于等于n_clusters=2。无论如何,我阅读了有关scikit库的信息,KMeans已经实现了。对于我的问题,我需要创建另一个替代方案,但我并没有真正成功。感谢您的帮助这里有一些在py中实现k-meas的简单方法。尝试搜索kmeas.py,但它们需要根据您的需要进行调整
import numpy as np
from sklearn import cluster

n_clusters = 2

k_means = cluster.KMeans(n_clusters=n_clusters)
k_means.fit(filename)
values = k_means.cluster_centers_
labels = k_means.labels_

print values
print labels