Python,Scikit-learn,K-means:参数n_init实际上做了什么?

时间:2017-09-22 07:47:27

标签: python machine-learning scikit-learn cluster-analysis k-means

我是Python的初学者。现在,我试图了解来自sklearn.cluster.KMeans的参数 n_init

来自文档:

  

n_init :int,默认值:10

     

使用不同质心种子运行k-means算法的时间。根据惯性,最终结果将是n_init连续运行的最佳输出。

起初,我认为这意味着代码运行的时间,直到我找到helpful question,并且我意识到这是 max_iter 所做的。

参数 n_init 到底是做什么的?我真的不明白。

1 个答案:

答案 0 :(得分:3)

在K-means中,质心的初始位置在其收敛中起着非常重要的作用。有时,初始质心的放置方式使得在K-连续迭代期间群集保持大幅度变化,甚至在收敛条件发生之前,达到max_iter并且我们留下错误簇。因此,在此获得的聚类可能不正确。为了克服这个问题,引入了这个参数。 n_iter的值基本上决定算法使用的随机选择的质心集合的数量。对于每个不同的点集,比较群集移动的距离,即如果群集行进的距离小于我们最接近地面实况/最佳解决方案的可能性。返回提供最佳性能的点及其各自的运行以及所有簇标签。

如果您有兴趣,还可以查看专为解决此问题而设计的k-means++ algorithm

您还可以查看有关初始质心问题的this link for more details