当kmeans聚类没有肘点时你会怎么做

机器算法验证 聚类 k-均值
2022-01-20 05:32:56

我了解到,在选择多个集群时,您应该为不同的 K 值寻找肘点。我已经绘制了从 1 到 10 的 k 值的 insidess 值,但我没有看到清晰的弯头。在这样的情况下你会怎么做?

麻烦的 KMeans

4个回答

方法不对?

也许您为您的问题使用了错误的算法。

错误的预处理?

K-means 对预处理高度敏感。如果一个属性的规模比其他属性大得多,它将主导输出。然后,您的输出将有效地是一维的

可视化结果

无论您做什么,您都需要通过其他方式验证您的结果,而不是从 SSQ 等数字开始。相反,考虑可视化

可视化还可能告诉您,您的数据中可能只有一个集群

一种方法是手动检查集群中的成员以获得特定的 k 以查看分组是否有意义(它们是否可区分?)。这可以通过列联表和条件方法来完成。对各种 k 执行此操作,您可以确定合适的值。

一种不太主观的方法是使用剪影值:

https://stackoverflow.com/questions/18285434/how-do-i-choose-k-when-using-k-means-clustering-with-silhouette-function

这可以用你最喜欢的软件包来计算。从链接:

该方法只是将组内相似度与最接近的组相似度进行比较。如果任何数据成员到同一个集群的其他成员的平均距离高于到其他一些集群成员的平均距离,那么这个值是负的,集群是不成功的。另一方面,接近 1 的 silhuette 值表示成功的聚类操作。0.5 不是聚类的精确度量。

  • 没有 K-means 的肘部并不意味着数据中没有聚类;
  • 没有肘部意味着使用的算法不能分离簇;(想想同心圆的 K 均值,与 DBSCAN 相比)

一般来说,你可以考虑:

  • 调整你的算法;
  • 使用另一种算法;
  • 做数据预处理。

我们可以使用 NbClust 包来找到 k 的最佳值。它提供了 30 个指标来确定聚类的数量并提出最佳结果。

NbClust(数据=df,距离=“欧几里得”,min.nc=2,max.nc=15,方法=“kmeans”,索引=“all”)