在numpy中实施K-Medoids:中间体选择步骤

时间:2014-04-10 07:13:33

标签: python numpy vectorization k-means

作为this question的作者,我试图使用numpy来实现K-Medoids。然而,我对如何实现medoids-personalizeduation步骤([2]中的第二步)更感兴趣,包括逐个簇地选择最小化与另一个的距离之和的样本。属于同一群集的样本。 假设我们具有[1]中描述的相同结构:

# Number of samples
n_samples = 5
# Distance square matrix
D = np.array([[ 0.,  3.04959014,  4.74341649,  3.72424489,  6.70298441],
              [ 3.04959014,  0.        ,  5.38516481,  4.52216762,  6.16846821],
              [ 4.74341649,  5.38516481,  0.        ,  1.02469508,  8.23711114],
              [ 3.72424489,  4.52216762,  1.02469508,  0.        ,  7.69025357],
              [ 6.70298441,  6.16846821,  8.23711114,  7.69025357,  0.        ]])
# Medoids
medoids = np.array([0, 3])
# Cluster membership array
cl = np.array([0, 0, 1, 1, 0])

我无法使用numpy实现它...有人可以帮助我吗?

[编辑] 我目前最好的解决方案是:

for c in range(number_of_clusters):
    ind = np.where(cl == c)[0]
    m = np.argmin(D[np.ix_(ind, ind)].sum(axis=0))
    medoids[c] = ind[m]

0 个答案:

没有答案