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=10
和random_state = 1234
,那么回答没有意义。你怎么能随机初始化 10 倍具有固定random_state
的质心???
@serafeim 它基本上意味着统一选择 10 *(质心数),随机状态设置为 1234。这有助于清除您的查询吗?以上是关于Python、Scikit-learn、K-means:参数 n_init 实际上是做啥的? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
scikit-learn( Macine Learning in Python )
python将scikit-learn自带数据集转换为pandas dataframe格式
使用Python scikit-learn 库实现神经网络算法