如果数据集包含440个对象和8个属性(数据集来自UCI机器学习库)。那么如何为这样的数据集计算质心呢?(批发客户数据)https://archive.ics.uci.edu/ml/datasets/Wholesale+customers
如果我计算每行的值的平均值,那会是质心吗?我如何在Matlab中绘制结果聚类呢?
回答:
好的,首先,在数据集中,每一行对应数据中的一个单一示例,你有440行,这意味着数据集包含440个示例。每列包含该特定特征(或你称之为属性)的值,例如,你的数据集中第1列包含特征Channel
的值,第2列包含特征Region
的值,依此类推。
现在对于K均值聚类,你需要指定聚类的数量(K均值中的K)。假设你想要K=3个聚类,那么初始化K均值的最简单方法是从你的数据集中随机选择3个示例(即从你拥有的440行中随机抽取3行)作为你的质心。现在这3个示例就是你的质心。
你可以把你的质心想象成3个箱子,你希望将数据集中的每个示例放入最接近的箱子中(通常通过欧几里得距离来衡量;检查Matlab中的norm
函数)。
在第一轮将所有示例放入最接近的箱子后,你通过计算各自箱子中所有示例的mean
来重新计算质心。你重复将所有示例放入最接近的箱子的过程,直到数据集中的没有示例移动到另一个箱子为止。
一些Matlab的起点
你可以通过X = load('path/to/the/dataset', '-ascii');
来加载数据
在你的情况下,X
将是一个440x8
的矩阵。
你可以通过distance = norm(example - centroid1);
计算一个示例到质心的欧几里得距离,其中example
和centroid1
的维度都是1x8
。
重新计算质心将如下进行,假设你已经完成了K均值的一次迭代,并将所有示例放入了各自最接近的箱子。假设Bin1
现在包含所有最接近centroid1
的示例,因此Bin1
的维度为127x8
,这意味着440个示例中有127个在这个箱子中。为了计算下一轮迭代的质心位置,你可以执行centroid1 = mean(Bin1);
。你将对其他箱子进行类似的操作。
至于绘图,你需要注意你的数据集包含8个特征,这意味着8个维度,无法可视化。我建议你创建或寻找一个仅包含2个特征的(虚拟)数据集,这样就可以使用Matlab的plot()
函数进行可视化了。