这个 kmeans 聚类的最佳 k 是多少? (肘点图)
What would be the best k for this kmeans clustering? (Elbow point plot)
我正在尝试使用 kmeans 来寻找在首尔地铁站附近开咖啡店的最佳地点。
包含的功能有:
- 每月在特定车站下车的总次数
- 特定车站附近的租金
- 特定车站附近的现有咖啡店数量
我决定用肘点来找到最好的k。
我确实在 运行 kmeans 之前标准化了所有功能。
现在肘点似乎是k=3(或者可能是k=2),但我认为SSE对于肘点来说太高了。
同样使用 k=3,很难从集群中获得洞察力,因为集群只有三个。
使用 k=5 是获得洞察力的最佳点。
即使不是弯头点,也可以使用 k=5 吗?
或者 kmeans 首先不是一个好的选择?
肘点不是确定的规则,但更像是一种启发式方法(它在大多数时间都有效,但并非总是如此,所以我认为它更像是一个选择多个集群作为起点的良好经验法则)。最重要的是,肘点不能总是被明确识别,所以你不应该太担心它。
所以在那种情况下,如果您使用 k=5
更好地 results/gain 理解您的数据,那么我强烈建议您使用 k=5
而不是 [=12] =]!
现在,对于您的另一个问题,可能有更适合您的数据的方法,但这并不意味着 k-means 不是一个好的开始方式。如果您想尝试其他东西,scikit-learn
库 documentation 提供了关于在进行聚类时使用哪种算法或方法的很好的见解。
一种选择簇数的方式
就是‘肘法’。正如所解释的
机器学习专家 Andrew Ng,作者:
计算每个 k 的失真值
集群的数量,你可以绘制那个值
反对集群的数量。合适的k
值可能被识别在哪里失真
价值开始以较低的速度下降,
如下图 Ng 的示例所示,
在 k = 3(Ng,没有日期 a)。当失真值以稳定的速率减小时会出现问题,从而创建平滑的
曲线,如 Ng 在该图中右侧所示。没有明确的“联合”来识别
'弯头'。
我在做论文的时候,我的数据属于后者(见下文-我应该为K选择什么??-在做剪影分析时最终是4)
这意味着我需要找到替代方法。另一种方法是通过剪影分析。如 Scikit-Learn 中所述
文档,探索轮廓分析以了解分离
集群。
簇的轮廓系数从-1 到+1 评分。接近 +1 的分数表示
样本远离相邻的簇,因此表示样本与
集群。零分意味着样本在边界上或接近决策
簇的边界。剪影得分为 -1 表示样本分配给了错误的
聚类(通过 KMeans 聚类的轮廓分析选择聚类的数量 — scikitlearn 0.19.1 文档,2017 年)。
当可视化集群中观测值的分布和轮廓时
相对于其他聚类的系数值,如“肘法”,可以直观地识别一个
适当的 k 值。本意是select一个k值,其中样本数在
每个集群相对相同,而大多数样本保持在平均水平以上
剪影得分。
我建议尝试一下(即使有明确的 "elbow")a) 确认您选择了合适的 k 值,b) 练习很好并且 see/understand 替代方法。
我认为此类特征的 k-means 无法解决您的问题。您可能需要重新考虑您的方法。尤其要注意你优化的函数(SSE 对你的任务意味着什么?)——在错误的特征上使用错误的函数可能意味着你得到了不同问题的答案...
肘法非常不可靠,我希望人们最终停止提及它。如果你使用 itz,你应该问的第一个问题是:曲线看起来像没有 k 的随机数据的典型曲线吗?如果是这样,请完全停止并重做您的方法,因为看起来您的数据很糟糕 - 或者至少,k-means 不起作用。您正处于这种情况:该图表明 k-means 不适用于您的数据。
我正在尝试使用 kmeans 来寻找在首尔地铁站附近开咖啡店的最佳地点。
包含的功能有:
- 每月在特定车站下车的总次数
- 特定车站附近的租金
- 特定车站附近的现有咖啡店数量
我决定用肘点来找到最好的k。 我确实在 运行 kmeans 之前标准化了所有功能。
现在肘点似乎是k=3(或者可能是k=2),但我认为SSE对于肘点来说太高了。
同样使用 k=3,很难从集群中获得洞察力,因为集群只有三个。
使用 k=5 是获得洞察力的最佳点。
即使不是弯头点,也可以使用 k=5 吗?
或者 kmeans 首先不是一个好的选择?
肘点不是确定的规则,但更像是一种启发式方法(它在大多数时间都有效,但并非总是如此,所以我认为它更像是一个选择多个集群作为起点的良好经验法则)。最重要的是,肘点不能总是被明确识别,所以你不应该太担心它。
所以在那种情况下,如果您使用 k=5
更好地 results/gain 理解您的数据,那么我强烈建议您使用 k=5
而不是 [=12] =]!
现在,对于您的另一个问题,可能有更适合您的数据的方法,但这并不意味着 k-means 不是一个好的开始方式。如果您想尝试其他东西,scikit-learn
库 documentation 提供了关于在进行聚类时使用哪种算法或方法的很好的见解。
一种选择簇数的方式 就是‘肘法’。正如所解释的 机器学习专家 Andrew Ng,作者: 计算每个 k 的失真值 集群的数量,你可以绘制那个值 反对集群的数量。合适的k 值可能被识别在哪里失真 价值开始以较低的速度下降, 如下图 Ng 的示例所示, 在 k = 3(Ng,没有日期 a)。当失真值以稳定的速率减小时会出现问题,从而创建平滑的 曲线,如 Ng 在该图中右侧所示。没有明确的“联合”来识别 '弯头'。
我在做论文的时候,我的数据属于后者(见下文-我应该为K选择什么??-在做剪影分析时最终是4)
这意味着我需要找到替代方法。另一种方法是通过剪影分析。如 Scikit-Learn 中所述 文档,探索轮廓分析以了解分离 集群。
簇的轮廓系数从-1 到+1 评分。接近 +1 的分数表示 样本远离相邻的簇,因此表示样本与 集群。零分意味着样本在边界上或接近决策 簇的边界。剪影得分为 -1 表示样本分配给了错误的 聚类(通过 KMeans 聚类的轮廓分析选择聚类的数量 — scikitlearn 0.19.1 文档,2017 年)。 当可视化集群中观测值的分布和轮廓时 相对于其他聚类的系数值,如“肘法”,可以直观地识别一个 适当的 k 值。本意是select一个k值,其中样本数在 每个集群相对相同,而大多数样本保持在平均水平以上 剪影得分。
我建议尝试一下(即使有明确的 "elbow")a) 确认您选择了合适的 k 值,b) 练习很好并且 see/understand 替代方法。
我认为此类特征的 k-means 无法解决您的问题。您可能需要重新考虑您的方法。尤其要注意你优化的函数(SSE 对你的任务意味着什么?)——在错误的特征上使用错误的函数可能意味着你得到了不同问题的答案...
肘法非常不可靠,我希望人们最终停止提及它。如果你使用 itz,你应该问的第一个问题是:曲线看起来像没有 k 的随机数据的典型曲线吗?如果是这样,请完全停止并重做您的方法,因为看起来您的数据很糟糕 - 或者至少,k-means 不起作用。您正处于这种情况:该图表明 k-means 不适用于您的数据。