我正在尝试kmeans来寻找在首尔地铁站附近开设咖啡店的最佳地点。
包括的功能是:
我决定用弯头找到最佳的k。 在运行kmeans之前,我确实对所有功能进行了标准化。
现在肘点似乎是k = 3(或k = 2),但我认为SSE对于肘点来说太高了。
另外,使用k = 3时,由于只有三个集群,因此很难从集群中获得洞察力。
使用k = 5是获得洞察力的最佳途径。
即使不是肘部,使用k = 5也是合理的吗?
还是kmeans不是一个好的选择?
答案 0 :(得分:3)
弯头点不是确定的规则,而是更多地是一种启发式方法(它在大多数情况下有效,但并非总是如此,因此我认为它更像是一个很好的规则用于选择许多簇的起点)。最重要的是,不能总是明确地确定肘点,因此您不必为此担心太多。
因此,在这种情况下,如果使用k=5
可以更好地理解/理解数据,那么我强烈建议您使用k=5
而不是k=3
!
现在,对于您的另一个问题,也许有一些方法更适合您的数据,但这并不意味着k均值并不是一个好的开始。如果您想尝试其他方法,scikit-learn
库documentation提供了很好的见解,说明了进行聚类时要使用哪种算法或方法。
答案 1 :(得分: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)练习并了解/理解替代方法非常好。
答案 2 :(得分:2)
我认为此类功能的k均值解决不了您的问题。您可能需要重新考虑您的方法。特别要注意优化的功能(SSE对您的任务意味着什么?)-在错误的功能上使用错误的功能可能意味着您会得到其他问题的答案...
他的肘部方法非常不可靠,我希望人们最终会停止甚至提及它。如果使用itz,您应该问的第一个问题是:曲线看起来像没有k的随机数据上的典型曲线吗?如果是这样,请完全停止并重做您的方法,因为看起来您的数据很差-至少,k-means不起作用。您正处于这种情况下:该图表明k均值不适用于您的数据。