我在R中使用h2o kmeans来划分我的人口。该方法需要进行审核,因此我想解释一下h2o的kmeans中使用的阈值。
在h2o kmeans(http://docs.h2o.ai/h2o/latest-stable/h2o-docs/data-science/k-means.html)的文档中,有人说:
H2O使用误差比例减少(PRE)来确定何时发生 停止分裂。 PRE值基于总和计算 (SSW)内的正方形。
PRE =(SSW [拆分前] -SSW [拆分后])/ SSW [拆分前]
当PRE低于阈值时,H2O会停止分裂,即阈值 函数的变量数和案例数为 如下所述:
阈值取这两个值中较小的一个:
0.8或[0.02 + 10 / number_of_training_rows + 2.5 /(number_of_model_features)^ 2]
源代码(https://github.com/h2oai/h2o-3/blob/master/h2o-algos/src/main/java/hex/kmeans/KMeans.java)的名称为:
final double rel_improvement_cutoff = Math.min(0.02 + 10. / _train.numRows()+ 2.5 / Math.pow(model._output.nfeatures(),2),0.8);
这个门槛来自哪里?有关于它的科学论文吗?
答案 0 :(得分:0)
我对这个门槛负责。我通过运行k-means算法运行大量数据集(人工和实际)来开发它。几年前,我开始研究SSW的改进,并按照John Hartigan的建议将其作为卡方变量进行测试。此标准在许多情况下失败,因此我切换到PRE。上面的等式是将非线性模型拟合到具有已知簇数的数据集的结果的结果。当我为Tableau编写k-means程序时,我使用了相同的PRE标准。在我离开Tableau for H2O之后,他们用我的PRE规则替换了Calinski-Harabasz索引,产生了类似的结果。 Leland Wilkinson,首席科学家,H2O。