我正在尝试使用python从零开始实现k-means聚类算法。我在更新每个群集的质心值时遇到问题。下面的代码显示了到目前为止的工作。我最初已将每个数据点聚类为k个聚类之一。 AllData包含329行;每行是一个单词,后跟300个特征,再后是已分配给它的簇的编号(值1-4)。我要在循环中尝试做的事情是通过创建一个数组A来开始,该数组A仅保存AllData中已分配给第一个集群的行。然后,我想获取A中每个功能列的均值并将质心更新为该质心。循环应针对所有4个群集迭代执行此操作。

k = 4
i = 1
while (i <= k):
     A = AllData[:,1:301][AllData[:,301] == i]
     centroids[i-1:i,:] = A.mean(axis=0)
     i = i + 1


重心数组中的4行的值正在正确更新。我遇到的问题是4个更新的质心值也在AllData的前4行上重写。我不希望这种情况发生。 AllData数组应保持不变。任何帮助将非常感激!

最佳答案

与大多数编程语言一样,在Python中,数组以索引0开头。因此,您将跳过第一列,并访问最后一列。

您可以使用array[array[:,-1]==i,:-1],尽管我建议将输入数据和标签分开

关于python - 更新质心值k-means聚类Python,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49742317/

10-16 02:34