K-Means ++算法 - 解释下一个集群中心的选择

时间:2017-06-28 08:52:50

标签: machine-learning k-means spherical-kmeans

enter image description here

就像图片一样,为什么不选择点2作为集群的第二个点?但是要生成[0,1]之间的随机数?

def initialize(X, K):#kmean++
m,n=shape(X)
C = mat(zeros((K,n)))
random_number=random.randint(0,m)
C[0,:]=X[random_number]
for k in range(1, K):
    D2 = scipy.array([min([scipy.inner(c-x,c-x) for c in C]) for x in X])
    probs = D2/D2.sum()
    cumprobs = probs.cumsum()
    r = scipy.rand()
    for j,p in enumerate(cumprobs):
        if r < p:
            i = j
            break
    C[k,:]=X[i]
return C

为什么生成r与p进行比较(图中的cumaltive probablity是Sum)?

1 个答案:

答案 0 :(得分:1)

因为在分析行为时,更容易理解在处理概率驱动选择时会发生什么。

直观地说,你不想选择最远点,因为它可能是异常值。
你想选择一个可能是相当远的质量的一部分的点 为此目的,使用PDF进行选择效果很好。