如果数据集有440个对象和8个属性(数据集来自UCI机器学习库)。那么我们如何计算这些数据集的质心。 (批发客户数据) https://archive.ics.uci.edu/ml/datasets/Wholesale+customers
如果我计算每行的平均值,那么它是质心吗? 以及如何在matlab中绘制结果簇。
答案 0 :(得分:29)
好的,首先,在数据集中,1行对应于数据中的单个示例,您有440行,这意味着数据集由440个示例组成。每列包含该特定功能(或您调用的属性)的值,例如:数据集中的第1列包含要素Channel
的值,第2列包含要素Region
的值等等。
<强> K-Means 强>
现在对于K-Means聚类,您需要指定聚类的数量(K-Means中的 K )。假设您想要K = 3个聚类,那么初始化K-Means的最简单方法是从数据集中随机选择3个示例(即3行,从您拥有的440行中随机抽取)作为质心。 现在这三个例子是你的质心。
您可以将您的质心视为3个箱,并且您希望将数据集中的每个示例放入最接近的(通常以欧几里德距离测量;检查函数{{1}在Matlab中)bin。
在第一轮将所有示例放入最近的bin后,您可以通过计算各自bin中所有示例的norm
来重新计算质心。您重复将所有示例放入最近的bin中的过程,直到数据集中没有示例移动到另一个bin。
一些Matlab起点
您按mean
在您的情况下,X = load('path/to/the/dataset', '-ascii');
将是X
矩阵。
您可以计算从示例到质心的欧几里德距离
440x8
,
其中,distance = norm(example - centroid1);
和example
都具有维度centroid1
。
重新计算质心将如下工作,假设您已经完成了1次K-Means迭代,并将所有示例放入各自最近的bin中。说1x8
现在包含最接近Bin1
的所有示例,因此centroid1
具有维度Bin1
,这意味着440中的127个示例位于此bin中。要计算下一次迭代的质心位置,您可以执行127x8
。你会对你的其他垃圾箱做类似的事情。
对于绘图,您必须注意您的数据集包含8个要素,这意味着8个维度,并且不可视化。我建议您创建或查找仅包含2个要素的(虚拟)数据集,因此可以使用Matlab的centroid1 = mean(Bin1);
函数进行可视化。