我想使用剪影得分为我的数据集选择一个最佳的集群数量。我的数据集是关于2000多个品牌的信息,包括购买该品牌的客户数量、该品牌的销售额以及该品牌在每个类别下销售的商品数量。在
由于我的数据集非常稀疏,所以在聚类之前我使用了maxabscaler和TruncatedSVD。在
我使用的聚类方法是k-means,因为我最熟悉这个方法(如果您对其他聚类方法有什么建议,我将非常感激)。在
当我将集群编号设置为80并运行k-means时,每次都会得到不同的轮廓分数。是因为k-means每次都给出不同的簇吗? 有时候,80个簇的轮廓分数小于200,有时恰恰相反。所以我对如何选择合理数量的集群感到困惑。在
此外,我的剪影得分范围很小,随着簇数的增加,变化不大,范围从0.15到0.2。在
以下是我从跑步轮廓得分得到的结果:
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
我将非常感谢你的建议!提前谢谢!在
我认为您使用的是sklearn,因此将
random_state
参数设置为一个数字,应该可以让您对同一k执行不同的k-means时得到可重复的结果。您可以将该数字设置为0、42或任何您想要的值,只要在不同的代码运行中保持相同的数字,结果将是相同的。在是的,k-means是随机的,所以它并不总是给出相同的结果。在
通常这意味着这个k不好。在
但不要盲目依赖轮廓。找到“最佳”k是不够可靠的。很大程度上,因为通常根本就没有最佳k。在
查看数据,并根据您的理解选择一个好的集群。别指望什么好事会自动出现。在
相关问题 更多 >
编程相关推荐