Python 对于这个kmeans集群,什么是最好的k?(弯点图)

Python 对于这个kmeans集群,什么是最好的k?(弯点图),python,python-3.x,machine-learning,cluster-analysis,k-means,Python,Python 3.x,Machine Learning,Cluster Analysis,K Means,我想在首尔地铁站附近找一个开咖啡店的最佳地点 包括的功能包括: 特定车站每月总下车量 特定车站附近的租金 特定车站附近现有咖啡馆的数量 我决定用肘点来找出最好的k。 在运行kmeans之前,我对所有特性进行了标准化 现在拐点似乎是k=3(或者可能是k=2),但我认为SSE对于拐点来说太高了 同样使用k=3,很难从集群中获得见解,因为只有三个集群 使用k=5是获得见解的最佳时机 即使不是拐点,使用k=5是否合理 或者kmeans一开始不是一个好的选择吗?肘点不是一个确定的规则,但更像是一个启发式

我想在首尔地铁站附近找一个开咖啡店的最佳地点

包括的功能包括:

  • 特定车站每月总下车量
  • 特定车站附近的租金
  • 特定车站附近现有咖啡馆的数量
  • 我决定用肘点来找出最好的k。 在运行kmeans之前,我对所有特性进行了标准化

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

    同样使用k=3,很难从集群中获得见解,因为只有三个集群

    使用k=5是获得见解的最佳时机

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


    或者kmeans一开始不是一个好的选择吗?

    肘点不是一个确定的规则,但更像是一个启发式方法(它在大多数情况下都有效,但并不总是有效,因此我认为它更像是一个选择大量集群的好经验法则)。最重要的是,肘点不能总是被明确识别,所以你不必太担心它

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


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

    选择聚类数量的一种方法 是“肘部法”。正如 机器学习专家Andrew Ng 计算每个k的失真值 簇数,您可以绘制该值 相对于集群的数量。合适的k 在失真的地方可以识别出该值 价值开始以较低的速度下降, 如下图中Ng的示例所示, k=3时(Ng,无日期a)。当失真值以稳定速率减小时,会出现问题,从而产生平滑的失真 曲线,如图中右边的Ng所示。没有明显的“关节”来识别 “肘部”

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

    这意味着我需要找到另一种方法。另一种方法是通过轮廓分析。如中所述,对轮廓分析进行了探索,以了解轮廓的分离 集群

    簇的轮廓系数得分从-1到+1。分数接近+1表示 样本与相邻簇的距离相同,因此表示样本与相邻簇的距离不同 集群。得分为零意味着样本处于边界或接近决策 集群的边界。轮廓分数为-1表示样本分配到了错误的位置 聚类(通过KMeans聚类的轮廓分析选择聚类数量-scikitlearn 0.19.1文档,2017年)。 当可视化集群和轮廓中的观测分布时 相对于其他簇的系数值,如“弯头法”,可以直观地识别 适当的k值。其目的是选择一个k值,其中 每个聚类都相对相同,而大多数样本保持在平均水平以上 轮廓分数


    我建议尝试(即使有明确的“肘”)a)验证您是否选择了合适的k值,b)练习和查看/理解其他方法是很好的

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

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