8

我在 400x1000 矩阵上的 matlab 中运行 kmeans,由于某种原因,每当我运行算法时,我都会得到不同的结果。下面是一个代码示例:

[idx, ~, ~, ~] = kmeans(factor_matrix, 10, 'dist','sqeuclidean','replicates',20);

出于某种原因,每次运行此代码时都会得到不同的结果?有任何想法吗?

我正在使用它来识别多重共线性问题。

谢谢您的帮助!

4

3 回答 3

18

MATLAB 中的 k-means 实现有一个随机组件:初始中心的选择。这会导致不同的结果。然而,实际上,MATLAB 多次运行 k-means 并返回具有最低失真的聚类。如果您每次都看到完全不同的聚类,这可能意味着您的数据不适合 k-means 寻找的那种聚类(球形),并且表明尝试其他聚类算法(例如光谱算法)。

您可以通过将一组初始中心作为函数参数之一(start参数)传递给它来获得确定性行为。这将为您每次提供相同的输出聚类。有几种启发式方法可以选择初始中心集(例如K-means++)。

于 2012-08-27T06:57:44.780 回答
6

正如您在 wiki上看到的那样,k-means 算法通常是启发式的和部分概率的,Matlab 中的算法也不例外。

这意味着该算法存在一定的随机部分(在Matlab 的情况下,重复使用随机起点来寻找全局解)。这使得kmeans输出集群具有平均质量。但是:考虑到算法的伪随机性,每次你都会得到稍微不同的集群——这是正常的行为。

于 2012-08-27T06:47:55.943 回答
2

这称为初始化问题,因为 kmeans 从随机初始点开始对数据进行聚类。matlab 选择 k 个随机点并计算数据中的点到这些位置的距离,并找到新的质心以进一步最小化距离。因此对于质心位置,您可能会得到不同的结果,但答案是相似的。

于 2013-11-14T21:33:36.753 回答