Matlab:Kmeans每次给出不同的结果

时间:2012-08-27 06:40:46

标签: matlab k-means feature-selection

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

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

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

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

感谢您的帮助!

3 个答案:

答案 0 :(得分:18)

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

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

答案 1 :(得分:6)

正如你可以阅读the wiki,k-means算法通常是启发式算法和部分概率算法,Matlab中的算法也不例外。

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

答案 2 :(得分:2)

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