Scikit Learn – K-Means – 肘部准则

今天我在尝试学习一些关于K-means的内容。我已经理解了这个算法,并且知道它是如何工作的。现在我在寻找合适的k… 我找到了肘部准则作为检测合适k的方法,但我不明白如何在scikit learn中使用它?!在scikit learn中,我是这样进行聚类的

kmeans = KMeans(init='k-means++', n_clusters=n_clusters, n_init=10) kmeans.fit(data)

那么我应该为n_clusters = 1…n多次运行这个代码,并观察错误率来找到合适的k吗?我觉得这样做很愚蠢,而且会花费很多时间?!


回答:

肘部准则是一种可视化方法。我还没有看到它的一个稳健的数学定义。但K-means本身也是一种相当粗糙的启发式方法。

所以,是的,你需要运行K-means,设置k=1...kmax,然后绘制结果的SSQ,并决定一个“最优”的k。

存在K-means的改进版本,例如X-means,它从k=2开始,然后增加k,直到一个次要准则(AIC/BIC)不再改善。Bisecting K-means是一种从k=2开始,然后重复分割聚类直到k=kmax的方法。你可能可以从中提取中间的SSQs。

无论哪种方式,我觉得在任何实际使用案例中,如果K-means真的很好,你实际上是事先知道你需要的k。在这些情况下,K-means实际上不仅仅是一个“聚类”算法,而是一个向量量化算法。例如,将图像的颜色数量减少到k。(通常你会选择k,例如32,因为这样就是5位颜色深度,可以以压缩的方式存储)。或者,例如,在视觉词袋方法中,你会手动选择词汇量。一个流行的值似乎是k=1000。你并不太关心“聚类”的质量,主要目的是能够将图像减少到一个1000维的稀疏向量。900维或1100维表示的性能不会有实质性的不同。

对于实际的聚类任务,即当你想要手动分析结果聚类时,人们通常使用比K-means更高级的方法。K-means更多的是一种数据简化技术。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注