问题描述
这是K-均值算法,它接收具有k个簇和终止准则eps的2D numpy数组D。我需要显示一个示例,其中已更新的集群变为空,但是在每个示例中,我都尝试过这种情况不会发生。 我无法创建聚类并开始迭代,我必须以均值和k开头。
我试图更改k的值,更改均值的值。但是到目前为止,没有任何效果。
这是我在python中实现的代码(mu是均值,即上图中的质心):
def kMeans(D,k,eps,mu = None):
t = 0
if mu == None:
mu = []
for a in range(k):
mu.append(np.random.randint(np.min(D),np.max(D),size = (1,2))[0].tolist())
MuD = eps + 0.1
while (MuD > eps):
MuAnterior = mu.copy()
C = []
t += 1
clusters = [[] for _ in range(k)]
for c in range(len(D)):
dist = [[] for _ in range(k)]
for d in range(k):
dist[d].append(pow(distance.euclidean(D[c],mu[d]),2))
clusters[np.argmin(dist)].append(D[c])
C.append(np.argmin(dist))
for e in range(k):
suma = 0
for f in range(len(clusters[e])):
suma += clusters[e][f]
if len(clusters[e]) != 0:
mu[e] = (suma/len(clusters[e])).tolist()
else:
mu[e] = [0,0]
MuD = 0
for a in range(k):
MuD += pow(distance.euclidean(mu[a],MuAnterior[a]),2)
return C,mu
解决方法
在一维中,初始簇为[0],[1、5],[6]时,第一步将更新为[0、1],[],[5、6]。