環境: Jupyter Notebook, Macbook air, Python2.7
Global K-meansを実装したんですが、アルゴリズムがうまく働いていないのでそれについて質問させてもらいました。K=3以上のクラスタリングになるとなぜかcentroidが近くに設置されます。どこがおかしいんでしょうか?

アルゴリズムについてはHEREスライドの12,13ページにあります。
データ生成コード
適応前

Global K-means実行結果は以下のとうりです(K=3)
結果

class GlobalKmeans(object):

    def __init__(self, X, cluster):
        self.X = X
        self.num = X.shape[0]
        self.label = np.zeros((self.num, 1))
        self.cluster = cluster


    def distance(self, x, y):
        return np.linalg.norm(x-y)


    def assign(self):
        # Make array for storing value of Cost function
        current_distance = 0
        temp_dis = 0
        clas_rabel = 0
        for i in xrange(self.num):
            # self.X[i]をcentroid候補として固定
            for j in xrange(self.num):
                # まず固定したcentroid候補とcurrentデータとの距離測定
                kyori = self.distance(self.X[i], self.X[j])
                for k in xrange(self.k):
                    # currentデータと各centroidsとの距離測定
                    k_kyori = self.distance(self.centroid[k], self.X[j])
                    #from IPython.core.debugger import Pdb; Pdb().set_trace()

                    # 一番近い距離をkyoriにする
                    if k_kyori < kyori:
                        kyori = k_kyori
                    else:
                        kyori = kyori
                # 1回目
                if i == 0:
                    current_distance = current_distance + kyori
                # 2回目以降はtemp
                else:
                    temp_dis = temp_dis + kyori
            # ラベル更新         
            if temp_dis <= current_distance:
                clas_rabel = i

        if self.k < self.cluster:
            # Add centroid
            self.centroid = np.concatenate((self.centroid, self.X[clas_rabel].reshape((1,2))), axis = 0)   
        #from IPython.core.debugger import Pdb; Pdb().set_trace()


    def give_label(self):
        for i in xrange(self.num):
            temp = self.distance(self.X[i], self.centroid[0])
            labe = 0
            for k in xrange(self.k):
                if k == 0:
                    continue
                if temp > self.distance(self.X[i], self.centroid[k]):
                    labe = k

            self.label[i] = labe


    def fit(self):
        self.k = 1
        self.centroid = np.mean(self.X, axis = 0).reshape((1,2))
        while(self.k <= self.cluster):
            self.assign()
            self.k = self.k + 1
        self.k = self.k - 1
        self.give_label()

    def plot(self):
        plt.figure(figsize=(10,10))
        for j in xrange(self.cluster):
            points = X[np.where(self.label == j)[0]]
            plt.scatter(points[:,0], points[:,1])
            plt.scatter(self.centroid[j,0], self.centroid[j,1], s = 300, marker = "x")