我正在尝试使用python从头开始实现k-means聚类算法。我在更新每个群集的质心值时遇到问题。下面的代码显示了我到目前为止所处的位置。我最初将每个数据点聚集到一个k簇中。 AllData包含329行;每行是一个单词,后跟300个要素,后跟已分配给它的簇的编号(值1到4)。我在循环中尝试做的是从创建一个数组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数组应保持不变。任何帮助将不胜感激!
答案 0 :(得分:1)
在Python中,与大多数编程语言一样,数组以索引0开头。因此,您跳过第一列,并访问最后一列。
您可以使用array[array[:,-1]==i,:-1]
,但我建议您将输入数据与标签分开