在执行K均值聚类时,我已经实现the kmeans++ algorithm来初始化聚类。循环必须运行k
次。我想知道是否有任何方法可以向量化算法以使其运行更快?
points
是d维点的数组,k
是返回的质心数。
它的工作原理是计算从已找到的群集到所有点的最小距离,然后计算从这些点中选择下一个群集的概率。
问题实际上是当k
很大时,伸缩性很差。
def init_plus_plus(points, k):
centroids = np.zeros_like(points[:k])
r = np.random.randint(0, points.shape[0])
centroids[0] = points[r]
for i in range(1, k):
min_distances = self.euclidian_distance(centroids[:i], points).min(1)
prob = min_distances / min_distances.sum()
cs = np.cumsum(prob)
idx = np.sum(cs < np.random.rand())
centroids[i] = points[int(idx)]
return centroids