有人可以解释为什么random_state参数对模型的影响如此之大吗?
我有一个 RandomForestClassifier 模型,想要设置random_state(用于可重复性倾倒),但根据我使用的值,我在整体评估指标(F1 分数)上得到非常不同的值
例如,我尝试将同一模型拟合为 100 个不同的random_state值,在训练广告测试后,最小的 F1 是 0.64516129,最大的是 0.808823529)。这是一个巨大的差异。
这种行为似乎也很难比较两个模型。
思潮?
如果random_state影响您的结果,则意味着您的模型具有很高的方差。在随机森林的情况下,这仅仅意味着您使用的森林太小,应该增加树的数量(由于装袋 - 减少方差)。在scikit-learn中,这是由构造函数中的n_estimators
参数控制的。
为什么会这样?每种 ML 方法都试图最小化误差,从材料的角度来看,误差通常可以分解为偏差和方差 [+noise](参见偏差方差 dillema/权衡)。偏差只是您的模型最终必须与期望值相差多远 - 这部分误差通常来自一些先前的假设,例如对非线性问题使用线性模型等。方差是当您对不同的数据子集进行训练(或使用不同的超参数,在随机方法的情况下,随机种子是一个参数)时,结果的差异程度。超参数由我们初始化,参数由模型本身在训练过程中学习。 最后 - 噪声不是来自问题本身(或数据表示)的可减少误差。因此,在您的情况下 - 您只是遇到了具有高方差的模型,决策树以其极高的方差(和小偏差)而闻名。因此,为了减少方差,Breiman提出了特定的装袋方法,今天称为随机森林。森林越大,方差减少的效果越强。特别是 - 有 1 棵树的森林有很大的方差,1000 棵树的森林对于中等大小的问题几乎是确定性的。
综上所述,你能做什么?
- 增加树木的数量 - 这必须有效,并且是很好理解和合理的方法
- 在评估过程中random_seed视为超参数,因为这正是 - 如果您不希望增加森林的大小,则需要事先修复的元知识。