表明 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]。