K均值聚类与均值向量
我打算把数据分成两个组,然后计算这两个组的平均向量,但我遇到问题了。原因是平均值计算不适用于形状不规则的数组,你有什么建议可以帮我处理这些数据吗?
import numpy as np
X = np.array([[1,1],[1.5,2],[3,4],[5,7],[3.5,5],[3,7],[3.5,4.5],[5,8],[5,1]])
centroid = np.array([[2.5,2.2],[4,6.3]])
clusters={}
for x in X:
z= min([(i[0], np.linalg.norm(x-centroid[i[0]])) for i in enumerate(centroid)], key=lambda t:t[1])
try:
clusters[z].append(x)
except KeyError:
clusters[z]=[x]
newmu = []
r=[]
d=[]
keys = sorted(clusters.keys())
for k in keys:
if k[0]==0:
r.append(clusters[(k[0],k[1])])
else:
d.append(clusters[(k[0],k[1])])
c=np.mean(d ,axis = 0)
f=np.mean(r,axis=0)
print c
print f
变量 r 是:[[array([ 2., 3.])], [array([ 1.5, 2. ])], [array([ 3., 4.])], [array([ 1., 1.])], [array([ 5., 1.])]],这个没有问题,因为它的形状是规则的。
问题出在变量 d 上:[[array([ 5., 7.]), array([ 3., 7.])], [array([ 3.5, 5. ])], [array([ 3.5, 4.5])], [array([ 5., 8.])]],这个就没有规则形状,所以计算平均值时会出问题。
1 个回答
0
在计算平均值之前,你需要先把d解包:
...
d = [item for sublist in d for item in sublist]
c = np.mean(np.array(d), axis=0)
...