使用带有 Silhouette 函数的 k-means 聚类时如何选择 k?

Posted

技术标签:

【中文标题】使用带有 Silhouette 函数的 k-means 聚类时如何选择 k?【英文标题】:How do I choose k when using k-means clustering with Silhouette function? 【发布时间】:2013-08-19 13:48:41 【问题描述】:

我一直在研究 k-means 聚类,但不清楚的一件大事是 Silhouette 函数真正告诉我什么?

我知道它表明应该确定什么合适的 k,但我无法理解轮廓函数的真正含义是什么?

我在某处读到,如果轮廓的平均值小于 0.5,则您的聚类无效。

提前感谢您的回答。

【问题讨论】:

【参考方案1】:

来自silhouette的定义:

剪影值

每个点的轮廓值是衡量该点相似程度的指标 点是与其他集群中的点相比,它自己的集群中的点 簇,范围从 -1 到 +1。

第 i 个点 Si 的轮廓值定义为

Si = (bi-ai)/ max(ai,bi) 其中 ai 是到第 i 个的平均距离 指向与 i 在同一簇中的其他点,bi 是 从第 i 个点到不同点的最小平均距离 集群,在集群上最小化。

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

【讨论】:

感谢您的回答。最后我知道数据中是否存在负轮廓,聚类不再有效。正如我之前所说的,剪影的平均值是 0.46,但是有一些数据的剪影值为负,我现在该怎么办?这意味着 kmean 算法不适用于我还是...? @user2691280,您可以增加 k-means 聚类的参数 k 以减少负 silhoette 值的可能性。 我有真实的数据,这与复合失败有关。我在学习力学。我们在复合材料中有 3 个失败模型。它应该是3。当我在 -2,+2 之间对数据进行归一化时,轮廓增加的平均值……归一化是否对此产生了积极的影响? @user2691280,以分段线性方式对数据进行归一化可能会根据数据在正方向或负方向上改变轮廓值。如果集群分配相对于原始案例没有改变,则不一定表示集群改进。 您确定负值表示聚类无效吗?我尝试使用 k=4,但那里有负值。请看我的剪影值MediaFire【参考方案2】:

@fatihk 给出了很好的引用;

此外,您可以将轮廓值视为 集群如何相互重叠,即-1:完美重叠, +1:集群是完全可分离的; 但特定算法的低轮廓值并不意味着没有集群,而是意味着使用的算法无法分离集群,您可以考虑调整您的算法或使用不同的算法(考虑 K-means 同心圈,与 DBSCAN)。

【讨论】:

【参考方案3】:

有一个与肘法相关的显式公式可以自动确定聚类的数量。该公式告诉您在使用肘部方法确定聚类数量时检测到的肘部强度,请参阅here。请参阅此处的插图: Enhanced Elbow rule

【讨论】:

我看不到我的照片。它在我的文章中,但我希望它也能出现在这里。

以上是关于使用带有 Silhouette 函数的 k-means 聚类时如何选择 k?的主要内容,如果未能解决你的问题,请参考以下文章

玩 2.5 剪影 4 - 带有 guice 的 DI

带有熊猫的剪影分数的正确数据格式

来自 sklearn.metrics.silhouette_samples 的 MemoryError

无法使用 sklearn 中的稀疏矩阵计算 silhouette_score [关闭]

在R中练习k-meas聚类

如何使用 Play Silhouette 实现无状态 cookie 身份验证?