def bi_kmeans(data, k): q = K_means.kmeans(data, 2) index = 2 # 初始化centroids节点 centroid = K_means.init_centroids(data, 2) index=2 while index!=k: datasep = [] a = max_key(get_sse(data, centroid, q)) print a for i in range(len(data)): if q[i] == a: datasep.append(data[i]) sep_centroid = K_means.init_centroids(datasep, 2) index += 1 print centroid centroid=copy.deepcopy(numpy.delete(centroid, a,0)) print centroid centroid = numpy.concatenate((centroid, sep_centroid)) print "======================================" print centroid print "======================================" q = K_means.cost_funct(data, centroid) centroid = K_means.update_centroid(data, centroid, q) pre_centroid = centroid q = K_means.cost_funct(data_process.data, centroid) now_centroid = copy.deepcopy(pre_centroid) pre_centroid = K_means.update_centroid(data, pre_centroid, q) print now_centroid - pre_centroid while (now_centroid != pre_centroid).any(): print pre_centroid print now_centroid q = K_means.cost_funct(data, pre_centroid) print q now_centroid = copy.deepcopy(pre_centroid) pre_centroid = K_means.update_centroid(data, pre_centroid, q) return q