表明 K-Means 算法将以这样一种方式更新聚类 C,即一个聚类变为空,即使它在 C 中至少有一个点?
Show that the K-Means algorithm will update a clustering C in such a way that one cluster becomes empty even though it had at least one point in C?
这是 K 均值算法,它接收具有 k 个簇和终止条件 eps 的 2D-numpy 数组 D。我需要展示一个示例,其中更新的集群变为空,但在我尝试过的每个示例中都不会发生这种情况。 我无法创建集群并开始迭代,我必须从均值和 k 开始。
我试过改变k的值,改变means的值。但到目前为止没有任何效果。
这是我在 python 中实现的代码(mu 是方法,或 centroids,如上图所示):
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
在 1D 中,初始簇为 [0]、[1, 5]、[6],第一步将更新为 [0, 1]、[]、[5, 6]。
这是 K 均值算法,它接收具有 k 个簇和终止条件 eps 的 2D-numpy 数组 D。我需要展示一个示例,其中更新的集群变为空,但在我尝试过的每个示例中都不会发生这种情况。 我无法创建集群并开始迭代,我必须从均值和 k 开始。
我试过改变k的值,改变means的值。但到目前为止没有任何效果。
这是我在 python 中实现的代码(mu 是方法,或 centroids,如上图所示):
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
在 1D 中,初始簇为 [0]、[1, 5]、[6],第一步将更新为 [0, 1]、[]、[5, 6]。