2014-09-03 48 views
2

如果数据集有440个对象和8个属性(数据集取自UCI机器学习库)。那么我们如何计算这些数据集的质心。 (批发客户数据) https://archive.ics.uci.edu/ml/datasets/Wholesale+customersK意味着多维数据的聚类

如果我计算每行的值的平均值,那会是质心? 以及如何在matlab中绘制结果集群。

+1

您是否尝试使用任何可用的统计软件包来计算K均值聚类?你试过R统计吗? – rfolt 2014-09-03 17:30:37

+0

我不知道这件事。我读了它的另一个工具来执行k方法。我需要的是了解算法。不过谢谢你,至少我知道了一些新的东西。 – Suvidha 2014-09-04 16:38:44

回答

20

OK,首先,在数据集中,1行对应于一个单个的示例中的数据,您有440行,这意味着数据集由440个示例组成。每列包含该特定特征(或称之为特征)的值,例如,数据集中的第1列包含功能Channel的值,第2列包含功能Region等的值。

K-Means

现在对于K-均值聚类,你需要指定集群的数量(以K-意味着ķ)。假设你想要K = 3个簇,那么初始化K-Means最简单的方法就是从你的数据集中随机选择3个例子(也就是3行,从440行中随机抽取)作为你的质心。 现在这3个例子是你的质心

你可以把你的重心为3个箱,你想要把每一例从数据集中到最接近(通常由欧氏距离测量;检查功能norm在Matlab中)垃圾桶。

第一轮将所有示例放入最近的箱子后,您可以通过计算其各个箱中所有示例的mean来重新计算质心。您重复将所有示例放入最近的垃圾箱的过程,直到数据集中的示例不会将移动到另一个垃圾箱。

一些Matlab起点

您可以通过X = load('path/to/the/dataset', '-ascii');

加载数据在你的情况X将是一个440x8矩阵。

可以通过 distance = norm(example - centroid1);, 其中两个,examplecentroid1具有维数计算1x8从一个例子的质心的欧几里得距离。

重新计算质心的工作原理如下,假设您已经完成了K-Means的1次迭代并将所有示例放入其各自的最近仓。假设Bin1现在包含最接近centroid1的所有示例,因此Bin1的维度为127x8,这意味着440个中的127个示例位于此容器中。要计算下一次迭代的质心位置,可以执行centroid1 = mean(Bin1);。你会做类似的事情,你的其他箱。至于绘图,你必须注意到你的数据集包含8个特征,这意味着8个维度,哪个是不可视的。我建议你创建或寻找只包含2个特征的(虚拟)数据集,因此可以通过使用Matlab的plot()函数进行查看。

+0

谢谢你的解释。我不会找到比这更好的解释。非常感谢您的耐心。否则,我开始相信,stackoverflow不适合像我这样天真的人。 – Suvidha 2014-09-04 16:16:53