针对相同数据和群集数量的不同轮廓分数

时间:2017-08-29 07:20:09

标签: python cluster-analysis k-means unsupervised-learning silhouette

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

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

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

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

此外,我的轮廓得分的范围非常小,并且随着我增加群集的数量而变化不大,范围从0.15到0.2。

以下是我运行Silhouette得分的结果:

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

我非常感谢你的建议!提前谢谢!

2 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:0)

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