为什么R中的h2o.randomForest比randomForest包做出更好的预测

时间:2017-05-20 09:42:09

标签: r random-forest h2o

free(c);

我尝试用Kaggle比赛做出预测:桑坦德客户满意度:https://www.kaggle.com/c/santander-customer-satisfaction 当我在R中使用randomForest包时,我得到了AUC = 0.57的测试数据的最终结果,但是当我使用h2o.randomForest时,我得到了AUC = 0.81的测试数据的最终结果。两个函数中的参数是相同的,我只有使用ntree = 100的默认参数。 那么为什么h2o.randomForest比randomForest包本身做出更好的预测呢?

1 个答案:

答案 0 :(得分:5)

首先,正如user1808924所指出的,算法及其默认超参数存在差异。例如,R的randomForest基于Gini标准进行分割,H2O树基于平方误差的减少进行分割(即使对于分类)。 H2O还使用直方图进行拆分,并且可以处理分类变量上的拆分而无需虚拟(或单热)编码(尽管我认为这不重要,因为Santander数据集完全是数字的)。关于H2O分裂的其他信息可以在here找到(这在GBM部分中,但两个算法的分裂是相同的)。

如果你看一下R randomForest模型的预测,你会发现它们的增量都是0.02。 R的randomForest构建了非常深的树,从而产生了纯叶节点。这意味着预测结果或观察结果要么在每棵树中都是0或1,并且由于您设置了ntrees=50,预测将全部以0.02为增量。你获得不好的AUC分数的原因是因为AUC是预测的重要顺序,并且因为你的所有预测都是[0.00,0.02,0.04,...],所以有很多关系。 H2O随机森林中的树木不是那么深,因此不那么纯净,允许对它们进行更细粒度的预测,并且可以更好地分类以获得更好的AUC分数。