首页 > 解决方案 > Matlab中的k-means算法给出错误答案?

问题描述

我有以下疑问:我正在使用 Matlab 的 k-means 函数,我只想使用 vanilla Lloyd 算法,以及我想要的一组初始化点。我使用以下代码,其中“开始”是我的初始化向量。

kmeans(data,[],'Start',start, 'OnlinePhase', 'off');

假设我的数据是 (-2,-1)X(2,1) 范围内的二维数据,我将起点初始化为 (-10,0) 和 (0,0)。理想情况下,我应该在一个集群中获得所有点,而在其他集群中没有,但是我在答案中获得了两个集群(因为 (-10,0) 真的很远,所以它应该在一次迭代中收敛)。这怎么可能?我在 Matlab 网站上阅读了 k-means 算法的描述,似乎这不应该是答案。

k-means、原始数据和聚类数据

标签: matlabcluster-analysisk-means

解决方案


没有一个点最接近错误选择的中心。所以无法重新计算,将被一个新的中心替换(参见文档)。首先将所有点分配给 0,0 簇。一些算法甚至会因为除以 0 而失败,或者丢弃这个中心并减少到 k=1。在 Matlab 中,您可以选择处理 - 默认情况下,它将选择离所有中心最远的点作为替换。

恕我直言,保持一个空的集群中心是相当合理的,因为它不会改变您在选择初始中心时想到的任何集群枚举,并且(当初始中心选择得当时)它甚至可能变为非空最终,当其他中心继续移动时(虽然不是在这里)。


推荐阅读