多维数据的K均值聚类

如果数据集包含440个对象和8个属性(数据集来自UCI机器学习库)。那么如何为这样的数据集计算质心呢?(批发客户数据)https://archive.ics.uci.edu/ml/datasets/Wholesale+customers

如果我计算每行的值的平均值,那会是质心吗?我如何在Matlab中绘制结果聚类呢?


回答:

好的,首先,在数据集中,每一行对应数据中的一个单一示例,你有440行,这意味着数据集包含440个示例。每列包含该特定特征(或你称之为属性)的值,例如,你的数据集中第1列包含特征Channel的值,第2列包含特征Region的值,依此类推。

K均值聚类

现在对于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);计算一个示例到质心的欧几里得距离,其中examplecentroid1的维度都是1x8

重新计算质心将如下进行,假设你已经完成了K均值的一次迭代,并将所有示例放入了各自最接近的箱子。假设Bin1现在包含所有最接近centroid1的示例,因此Bin1的维度为127x8,这意味着440个示例中有127个在这个箱子中。为了计算下一轮迭代的质心位置,你可以执行centroid1 = mean(Bin1);。你将对其他箱子进行类似的操作。

至于绘图,你需要注意你的数据集包含8个特征,这意味着8个维度,无法可视化。我建议你创建或寻找一个仅包含2个特征的(虚拟)数据集,这样就可以使用Matlab的plot()函数进行可视化了。

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注