Python Kmeans++算法中最优质心的选择

Python Kmeans++算法中最优质心的选择,python,algorithm,cluster-computing,Python,Algorithm,Cluster Computing,我需要一些专业的帮助。我正试图像KMeans++一样使用最佳质心选择实现KMeans算法,但我有点陷入了“选择初始质心”步骤。我已经实现了这个算法,但是选择了随机的初始质心。看起来是这样的: def随机样本浮点数,mi,ma: 返回ma-mi*np.random.random_samplen+mi def欧几里得距离组x,C: 返回np.sqrtnp.sumnp.powerC-x,2,轴=1 def KMeans_v2K,Dx: 选择随机质心 cDx=np.zerosK*Dx.shape[1]

我需要一些专业的帮助。我正试图像KMeans++一样使用最佳质心选择实现KMeans算法,但我有点陷入了“选择初始质心”步骤。我已经实现了这个算法,但是选择了随机的初始质心。看起来是这样的:

def随机样本浮点数,mi,ma: 返回ma-mi*np.random.random_samplen+mi def欧几里得距离组x,C: 返回np.sqrtnp.sumnp.powerC-x,2,轴=1 def KMeans_v2K,Dx: 选择随机质心 cDx=np.zerosK*Dx.shape[1] cDx.shape=K,Dx.shape[1] 对于np.arangeDx.shape[1]中的d: cDx[:,d]=随机样本浮动,np.minDx[:,d],np.maxDx[:,d] 聚类预测 Dyp=np.zerosDx.shape[0] 迭代=真 迭代时: cDx_ant=cDx.copy 对于np.arangeDx.shape[0]中的i: 距离\点\质心=欧几里德距离\群dx[i],cDx pred_y=np.argmindistance_point_形心 Dyp[i]=pred_y 对于rangeK中的k: cDx[k,:]=np.meanDx[Dyp==k],轴=0 迭代=np.absolutenp.sumcDx-cDx_ant>0.00001 显示聚类结果 图2,ax=plt.子图尺寸=10,5 ax.scatterDx[:,0],Dx[:,1],c=Dyp ax.scattercDx[:,0],cDx[:,1],marker='*',s=200,c='b' 正如您所见,质心是在数据集范围内随机选择的。现在,我想执行一个函数,选择一个更好的质心,如下所示:

从数据点中随机均匀地选择一个中心。 对于每个数据点x,计算Dx,即x与已选择的最近中心之间的距离。 随机选择一个新的数据点作为新的中心,使用加权概率分布,其中选择的点x的概率与Dx^2成正比。您可以使用scipy.stats.rv_离散进行此操作。 重复步骤2和3,直到选择了k个中心。 既然已经选择了初始中心,请使用标准 k-均值聚类。 我在这里有点迷茫,因为我真的不知道如何加权每个点到每个质心的距离,并根据我猜的最佳权重选择最佳质心。我只是试着测量所有的点到第一个质心的距离,但是我不知道应该将这些距离与什么概率进行比较。如果这有道理的话

顺便说一下,我从一篇类似的文章中复制了选择最佳质心的步骤。真正的文档是第3页

其中步骤定义如下:

让Dx表示从数据点到我们已经选择的最近中心的最短距离:

1a。取一个中心c1,从X均匀随机选择 1b。以一个新的中心ci为例 ,选择x∈ 概率为Dx^2/∑x∈X Dx^2或Dx**2/sumDx**2。 1c。重复步骤1b。直到我们把k个中心全部拿走。 继续使用标准的k-均值算法。 我们将步骤1b中使用的加权称为“D2加权”。

如果有人能帮我完成这个功能,或者能更好地解释一下,我将永远感激。非常感谢你的帮助/建议