Machine learning K-均值++;算法-解释下一个群集中心的选择

Machine learning K-均值++;算法-解释下一个群集中心的选择,machine-learning,k-means,spherical-kmeans,Machine Learning,K Means,Spherical Kmeans,就像图片一样,为什么不选择点2作为簇的第二个点?而是生成一个随机数bettwen[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]

就像图片一样,为什么不选择点2作为簇的第二个点?而是生成一个随机数bettwen[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
def初始化(X,K):#kmean++
m、 n=形状(X)
C=mat(零((K,n)))
随机数=random.randint(0,m)
C[0,:]=X[随机数]
对于范围(1,k)内的k:
D2=scipy.array([min([scipy.internal(c-x,c-x)表示c中的c]),表示x中的x])
probs=D2/D2.sum()
cumprobs=probs.cumsum()
r=scipy.rand()
对于枚举中的j,p(cumprobs):
如果r

为什么要生成r与p进行比较(图中的累积概率是总和)?

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

直觉上,您不想选择最远的点,因为它可能是一个异常值。
您希望选择一个点,该点可能是相当远的质量的一部分。
为此,使用PDF进行选择效果良好