1

我想使用轮廓分数为我的数据集选择最佳数量的集群。我的数据集是关于 2000 多个品牌的信息,包括购买该品牌的客户数量、该品牌的销售额以及该品牌在每个类别下销售的商品数量。

由于我的数据集非常稀疏,因此我在聚类之前使用了 MaxAbsScaler 和 TruncatedSVD。

我使用的聚类方法是 k-means,因为我最熟悉这个方法(我会感谢您对其他聚类方法的建议)。

当我将簇数设置为 80 并运行 k-means 时,我每次都得到不同的轮廓分数。是因为 k-means 每次都给出不同的聚类吗?有时,80 个簇的轮廓得分低于 200,有时则相反。所以我对如何选择合理数量的集群感到困惑。

此外,我的轮廓分数范围很小,并且随着聚类数量的增加而变化不大,范围从 0.15 到 0.2。

这是我从运行 Silhouette score 得到的结果:

For n_clusters=80, The Silhouette Coefficient is 0.17329035592930178
For n_clusters=100, The Silhouette Coefficient is 0.16970208098407866
For n_clusters=200, The Silhouette Coefficient is 0.1961679920561574
For n_clusters=300, The Silhouette Coefficient is 0.19367019831221857
For n_clusters=400, The Silhouette Coefficient is 0.19818865972762675
For n_clusters=500, The Silhouette Coefficient is 0.19551544844885604
For n_clusters=600, The Silhouette Coefficient is 0.19611760638136203

非常感谢您的建议!提前致谢!

4

2 回答 2

4

是的,k-means 是随机的,所以它并不总是给出相同的结果。

通常这意味着这个 k 不好。

不要盲目依赖剪影。找到“最佳”k 不够可靠。很大程度上,因为通常根本没有最好的 k

查看数据,并利用您的理解来选择一个好的聚类。不要期望任何好的东西会自动出现。

于 2017-08-31T19:23:55.747 回答
1

我认为您正在使用 sklearn,因此将random_state参数设置为一个数字应该可以让您对相同 k 的不同 k-means 执行获得可重现的结果。您可以将该数字设置为 0、42 或您想要的任何值,只需为代码的不同运行保持相同的数字,结果将是相同的。

于 2017-09-06T02:58:29.350 回答