kmeans ++的向量化实现

时间:2019-05-15 10:02:10

标签: python numpy vectorization

在执行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

0 个答案:

没有答案