这个 kmeans 聚类的最佳 k 值是多少? (肘点图)

Posted

技术标签:

【中文标题】这个 kmeans 聚类的最佳 k 值是多少? (肘点图)【英文标题】:What would be the best k for this kmeans clustering? (Elbow point plot) 【发布时间】:2020-03-25 03:32:15 【问题描述】:

我正在尝试 kmeans 寻找在首尔地铁站附近开设咖啡店的最佳地点。

包含的功能有:

    特定车站的每月总车次 特定车站附近的租金 特定车站附近现有咖啡店的数量

我决定使用肘点来找到最佳 k。 在运行 kmeans 之前,我确实对所有功能进行了标准化。

现在肘点似乎是 k=3(或者可能是 k=2),但我认为 SSE 对于肘点来说太高了。

同样使用 k=3,很难从集群中获得洞察力,因为只有三个集群。

使用 k=5 是获得洞察力的最佳选择。

即使不是肘点,使用 k=5 是否合理?

或者说,kmeans 一开始就不是一个好的选择?

【问题讨论】:

【参考方案1】:

肘点不是一个确定的规则,但 更像是一种启发式方法(它在大多数情况下都有效,但并非总是如此,所以我认为它更像是一个很好的规则-拇指选择从多个集群开始)。最重要的是,肘点不能始终明确识别,因此您不必太担心。

因此,在这种情况下,如果您使用k=5 在理解数据方面获得了更好的结果/收益,那么我强烈建议您使用k=5 而不是k=3

现在,对于您的另一个问题,可能有一些方法更适合您的数据,但这并不意味着 k-means 不是一个好的开始方式。如果您想尝试其他事情,scikit-learn 库 documentation 提供了很好的见解,可以帮助您了解在进行聚类时使用哪种算法或方法。

【讨论】:

【参考方案2】:

我认为此类功能上的 k-means 无法解决您的问题。你可能需要重新考虑你的方法。特别要注意您优化了哪些功能(SSE 对您的任务意味着什么?) - 在错误的功能上使用错误的功能可能意味着您会得到不同问题的答案...

他的肘部方法非常不可靠,我希望人们最终停止提及它。如果您使用 itz,您应该问的第一个问题是:曲线是否看起来像没有 k 的随机数据上的典型曲线?如果是这样,请完全停止并重做您的方法,因为您的数据看起来很糟糕——或者至少,k-means 不起作用。您正是处于这种情况:该图表明 k-means 不适用于您的数据。

【讨论】:

【参考方案3】:

选择簇数的一种方式 是“肘法”。正如解释的那样 机器学习专家 Andrew Ng,作者 计算每个 k 的失真值 集群的数量,您可以绘制该值 相对于集群的数量。一个合适的 k 值可以在失真的地方被识别 价值开始以较低的速度下降, 如下图 Ng 的示例所示, 在 k = 3(Ng,没有日期 a)。当失真值以稳定的速率减小时,就会出现问题,从而创建平滑的 曲线,如 Ng 在该图中右侧所示。没有明显的“联合”来识别 '弯头'。

当我写论文时,我的数据属于后者(见下文 - 我应该为 K 选择什么?? - 在进行轮廓分析时它最终是 4)

这意味着我需要找到一种替代方法。这种替代方法是通过轮廓分析。正如Scikit-Learn documentation 中所解释的,探索了轮廓分析以了解 集群。

集群的轮廓系数从 -1 到 +1 进行评分。接近 +1 的分数表示 样本与相邻簇的距离较远,因此表示样本与 集群。零分意味着样本在边界上或接近决策 簇的边界。 -1 的轮廓分数表示样本被分配到错误的 集群(在 KMeans 聚类中选择具有轮廓分析的集群数量 — scikitlearn 0.19.1 文档,2017)。 当可视化集群中的观察分布和轮廓时 相对于其他聚类的系数值,例如“肘法”,可以直观地识别 合适的k值。目的是选择一个 k 值,其中的样本数 每个集群相对相同,而大多数样本保持在平均水平以上 剪影分数。

我建议尝试一下(即使有明显的“肘部”),以 a) 验证您选择了合适的 k 值,并且 b) 练习和查看/理解替代方法很好。

【讨论】:

以上是关于这个 kmeans 聚类的最佳 k 值是多少? (肘点图)的主要内容,如果未能解决你的问题,请参考以下文章

R语言Kmeans聚类抽取聚类簇:fpc包的kmeansruns函数通过Calinski-Harabasz准则和平均轮廓系数(ASW)为Kmeans选择最优的聚类K值并与层次聚类的最优K值进行比较

如何利用kmeans将数据更加准确地聚类---利用隐含变量最佳类别(EM算法思想)实现

为 Kmeans 聚类选择 K 值

我如何可视化用于 kmeans 聚类的 tf-idf 向量的数据点?

R语言Kmeans聚类抽取聚类簇:fpc包clusterboot函数通过bootstrap重采样的方法评估Kmeans聚类的稳定性fpc包的kmeansruns函数通过CH准则和ASW获取最优K值

kmeans聚类