Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab:Kmeans每次给出不同的结果_Matlab_K Means_Feature Selection - Fatal编程技术网

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

Matlab:Kmeans每次给出不同的结果,matlab,k-means,feature-selection,Matlab,K Means,Feature Selection,我在一个400x1000矩阵上运行matlab中的kmeans,出于某种原因,每当我运行该算法时,我都会得到不同的结果。下面是一个代码示例: [idx, ~, ~, ~] = kmeans(factor_matrix, 10, 'dist','sqeuclidean','replicates',20); 出于某种原因,每次运行此代码都会得到不同的结果?有什么想法吗 我用它来确定多重共线性问题 谢谢你的帮助 如您所读,k-means算法通常是启发式和部分概率的,Matlab中的算法也不例外 这意

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

[idx, ~, ~, ~] = kmeans(factor_matrix, 10, 'dist','sqeuclidean','replicates',20);
出于某种原因,每次运行此代码都会得到不同的结果?有什么想法吗

我用它来确定多重共线性问题

谢谢你的帮助

如您所读,k-means算法通常是启发式和部分概率的,Matlab中的算法也不例外


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

MATLAB中的k-means实现有一个随机化的部分:初始中心的选择。这会导致不同的结果。实际上,MATLAB会多次运行k-means,并返回失真最低的聚类结果。如果您每次看到的聚类差异很大,这可能意味着您的数据不适合k-means所寻找的聚类类型(球形),这表明您需要尝试其他聚类算法(例如光谱算法)


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

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

挑剔:注意,一般来说,“启发式”和“随机性”是算法的两个不同属性。启发式算法对其决策使用近似(但通常是确定性)评级,而随机算法使用(伪)随机数进行决策。组合当然是可能的。@FlorianBrucker-True。这不是吹毛求疵:)质心不应该总是收敛到同一个星座吗?从理论上讲,K-均值导致相同的质心集。在实践中,是什么使最终结果随机?是否有简单有效的确定性方法来初始化K-均值?最简单但最简单的解决方案是自己选择一些质心。如果你应用一些启发式方法来寻找“好”的质心,你就有了一个确定的k-均值。你可能想读这篇文章,它使用最近邻搜索来建立一个确定的k-均值算法:但是质心应该总是收敛到同一个星座。从理论上讲,K-均值导致相同的质心集。在实践中,是什么让最终结果变得随机?