Scikit-learn,KMeans:如何使用 max_iter
Posted
技术标签:
【中文标题】Scikit-learn,KMeans:如何使用 max_iter【英文标题】:Scikit-learn, KMeans: How to use max_iter 【发布时间】:2017-04-15 22:07:40 【问题描述】:我想了解sklearn.cluster.KMeans类中的参数max_iter。
根据文档:
max_iter : int, default: 300
Maximum number of iterations of the k-means algorithm for a single run.
但在我看来,如果我有 100 个对象,则代码必须运行 100 次,如果我有 10.000 个对象,则代码必须运行 10.000 次才能对每个对象进行分类。 另一方面,在所有对象上运行多次是没有意义的。
我的误解是什么?我该如何解释这个参数?
【问题讨论】:
【参考方案1】:看这里:
https://www.naftaliharris.com/blog/visualizing-k-means-clustering/
每次单击更新质心时,都会执行一次新的迭代。这是有道理的,因为当质心移动时,到这些质心的距离也会发生变化,并且某些点可能会改变聚类。
【讨论】:
谢谢!似乎 k-means 与 sklearn 和 Mac Queen 之间存在差异(他的出版物第 283 页:projecteuclid.org/download/pdf_1/euclid.bsmsp/1200512992) 可以说max_iter的值越大,得到的结果越好吗?【参考方案2】:是的,您误解了参数。
一次迭代是遍历整个数据集。如果您有 100 个对象,则一次迭代分配 100 个点。如果你有 10000 个对象,一次迭代会处理 10000 个对象。
还有更聪明的算法;但是 sklearn k-means 在每次迭代中都会处理每个对象。
【讨论】:
以上是关于Scikit-learn,KMeans:如何使用 max_iter的主要内容,如果未能解决你的问题,请参考以下文章
如何从 scikit-learn KMeans 中获取聚类中心的文本?
k-means+python︱scikit-learn中的KMeans聚类实现( + MiniBatchKMeans)