就像图片一样,为什么不直接选择点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 进行比较(图中的累积概率是 Sum)?