微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

证明K-Means算法将更新聚类C,使得即使在C中至少有一个点,一个聚类也会变为空

如何解决证明K-Means算法将更新聚类C,使得即使在C中至少有一个点,一个聚类也会变为空

enter image description here

这是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]。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。