random_state 分类模型中的参数

random_state parameter in classification models

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

我有一个 RandomForestClassifier 模型,想设置 random_state(用于重现性 pourpouses),但根据我使用的值,我在总体评估指标(F1 分数)上得到非常不同的值

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

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

想法?

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

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

总结一下,你能做什么?

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