use*_*988 8 matlab k-means feature-selection
我在matlab上使用400x1000矩阵运行kmeans,出于某种原因,每当我运行算法时,我得到的结果都不同.下面是一个代码示例:
[idx, ~, ~, ~] = kmeans(factor_matrix, 10, 'dist','sqeuclidean','replicates',20);
Run Code Online (Sandbox Code Playgroud)
出于某种原因,每次运行此代码我都会得到不同的结果?有任何想法吗?
我用它来识别多重共线性问题.
谢谢您的帮助!
Ans*_*ari 18
MATLAB中的k-means实现有一个随机组件:初始中心的选择.这会导致不同的结果.然而,实际上,MATLAB多次运行k-means并返回具有最低失真的聚类.如果您每次都看到截然不同的聚类,则可能意味着您的数据不适合k-means寻找的那种聚类(球形),并且是尝试其他聚类算法(例如频谱聚类)的指示.
您可以通过将一组初始中心作为函数参数(start参数)之一传递来获得确定性行为.这样每次都会为您提供相同的输出聚类.选择初始中心集有几种启发式方法(例如K-means ++).
正如你可以在wiki上看到的那样,k-means算法通常是启发式算法和部分概率算法,Matlab中的算法也不例外.
这意味着该算法存在一定的随机部分(在Matlab的情况下,重复使用随机起点来找到全局解).这使得kmeans输出集群具有良好的平均质量.但是:考虑到算法的伪随机性,每次都会得到稍微不同的簇 - 这是正常的行为.