【发布时间】:2019-02-19 23:53:29
【问题描述】:
我有以下疑问: 我正在使用 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 算法的描述,似乎这不应该是答案。
【问题讨论】:
-
0分是什么意思?这就是在第一次迭代后将一个质心转移到的地方......构建测试以确保初始化正确,如果不正确则忽略它似乎是合乎逻辑的。
-
“构建一个测试以确保初始化正确似乎是合乎逻辑的”,构建一个测试?
-
一个测试,如:一个给定质心的平均值是 0/0=NaN,不能用它来计算,让我们使用我们的默认初始化来代替。
-
@CrisLuego 可以将空集群保留在原来的位置。也许您正在使用有关中心的先前知识进行聚类,并且您的初始类之一没有出现在新样本中。那么该类应该保持为空,并且集群可能不应该移动。
-
我认为@CrisLuengo 可能是对的,如果有一些糟糕的初始化,那么Matlab 的kmeans 算法可能会选择默认初始化。
标签: matlab cluster-analysis k-means