Python、Scikit-learn、K-means:参数 n_init 实际上是做啥的? [复制]

Posted

技术标签:

【中文标题】Python、Scikit-learn、K-means:参数 n_init 实际上是做啥的? [复制]【英文标题】:Python, Scikit-learn, K-means: What does the parameter n_init actually do? [duplicate]Python、Scikit-learn、K-means:参数 n_init 实际上是做什么的? [复制] 【发布时间】:2018-03-03 17:23:27 【问题描述】:

我是 Python 的初学者。现在,我试图了解sklearn.cluster.KMeans

中的参数 n_init 是什么

来自文档:

n_init :整数,默认值:10

使用不同质心种子运行 k-means 算法的次数。最终结果将是 n_init 连续运行在惯性方面的最佳输出。

起初,我认为这意味着代码运行的次数,直到我找到这个helpful question,我意识到这就是 max_iter 所做的。

参数 n_init 究竟是做什么的?实在看不懂。

【问题讨论】:

由于起点是随机的,n_init 说明算法应该使用多少组不同的随机点。然后它在惯性方面给出了最好的运行(算法在运行结束时移动了多少 - 小步骤 --> 更接近最佳解决方案) 它将随机初始化集群的质心这么多次。根据质心的初始值,形成的簇可能不同。 【参考方案1】:

在 K-means 中,质心的初始位置在其收敛中起着非常重要的作用。有时,初始质心的放置方式使得在 K-means 的连续迭代中,集群继续急剧变化,甚至在收敛条件可能发生之前,达到max_iter,我们留下了不正确的集群。因此,在这种情况下获得的集群可能不正确。为了克服这个问题,引入了这个参数。 n_iter 的值基本上决定了算法应该使用多少组不同的随机选择的质心。对于每组不同的点,比较集群移动了多少距离,即如果集群移动的距离很短,那么我们很可能最接近地面实况/最佳解决方案。返回提供最佳性能的点及其各自的运行以及所有集群标签。

有兴趣的也可以看看k-means++ algorithm专门为处理这个问题设计的。

您也可以查看this link for more details 了解初始质心问题。

【讨论】:

如果有人使用n_init=10random_state = 1234,那么回答没有意义。你怎么能随机初始化 10 倍具有固定random_state 的质心??? @serafeim 它基本上意味着统一选择 10 *(质心数),随机状态设置为 1234。这有助于清除您的查询吗?

以上是关于Python、Scikit-learn、K-means:参数 n_init 实际上是做啥的? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Python中计算TF-IDF(scikit-learn)

scikit-learn( Macine Learning in Python )

python将scikit-learn自带数据集转换为pandas dataframe格式

使用Python scikit-learn 库实现神经网络算法

python scikit-learn 环境搭建问题解决记录

无法在 Python 中安装 scikit-learn