首页 > 解决方案 > 为什么 k-means 聚类在使用不同的质心初始化时会给我不同的答案?

问题描述

我按照 k-means 聚类的伪代码编写了这段代码。当使用不同的值初始化集群的质心时,此代码给出不同的答案,并且这些答案都不正确。你能帮我吗?我用 15 个节点进行了测试,公差 = 0.00001 和迭代 = 100000 在此先感谢。

class kMeans:
  def __init__(self, coordinates, tolerance, iter, nof):
    self.grid = coordinates
    self.N = coordinates.shape[0]
    self.t = tolerance
    self.nof = nof    
    self.f = None

  def kMeans(self, nof):
      
        assign = [0]*self.N
        self.fac = np.empty([nof,2])
        for i in range(nof):
              for j in range(2):
                self.fac[i,j] = self.grid[i+10,j]

        for itr in range(iter):
          for n in range(self.N):
            distance = [0]*nof
            for f in range(nof):
              distance[f] = math.sqrt((self.grid[n,0]-self.fac[f,0])**2 + (self.grid[n,1]-self.fac[f,1])**2 )
            assign[n] = np.argmin(distance)

          for fa in range(nof):
            l = []
            x,y = 0,0
            for asg in range(self.N):
              if fa == assign[asg]:
                l.append(asg)
            x = np.mean(self.grid[l,0])
            y = np.mean(self.grid[l,1])

            if abs(x-self.fac[fa,0]) >= self.t:
              self.fac[fa,0] = x
            if abs(y-self.fac[fa,1]) >= self.t:
              self.fac[fa,1] = y
          continue
    
        print('dist:',distance)
        print('assign:',assign)
        print('fac:',self.fac)
        print('locate:', self.grid[l,1])
        self.f = self.fac
        return self.fac

'''

标签: pythonk-meansunsupervised-learning

解决方案


推荐阅读