分类模型中的random_state参数

时间:2016-03-11 16:01:35

标签: python random machine-learning scikit-learn evaluation

有人可以解释为什么random_state参数会如此影响模型吗?

我有一个RandomForestClassifier模型并且想要设置random_state(用于再现性pourpouses),但是根据我使用的值,我的整体评估指标(F1得分)得到的值非常不同

例如,我尝试使用100个不同的random_state值来拟合相同的模型,并且在训练广告测试之后,最小的F1是0.64516129和最大的0.808823529)。这是一个巨大的差异。

这种行为似乎也很难比较两种模型。

思想?

1 个答案:

答案 0 :(得分:3)

如果random_state影响您的结果,则表示您的模型高差异。在随机森林的情况下,这仅仅意味着您使用太小的森林并且应该增加树的数量(由于套袋 - 减少差异)。在scikit-learn中,这由构造函数中的n_estimators参数控制。

为什么会这样?每种ML方法都试图最小化误差,从形态上看,这种误差通常可以分解为偏差和方差[+噪声](参见偏差方差dillema /权衡)。偏差就是你的模型在预期中与真实值的距离有多远 - 这部分错误通常来自一些先前的假设,例如使用非线性问题的线性模型等。方差是你训练时你的结果有多大差异在不同的数据子集上(或使用不同的超参数,在随机方法的情况下,随机种子是参数)。 超参数由我们初始化,参数在培训过程中由模型本身学习。最后 - 噪声不是来自问题本身(或数据表示)的可减少的错误。因此,在您的情况下 - 您只是遇到具有高方差的模型,决策树因其极高的方差(和小偏差)而众所周知。因此,为了减少方差,Breiman提出了特定的装袋方法,现在称为随机森林。森林越大 - 方差减少的影响越大。特别是 - 有1棵树的森林有很大的差异,1000棵树的森林对于中等大小的问题几乎是确定性的。

总结一下,你能做些什么?

  • 增加树木的数量 - 这必须有效,并且是很好理解和合理的方法
  • 在评估期间将random_seed视为超参数,因为正是这一点 - 如果您不希望增加森林的大小,您需要提前修复的元知识。