【问题标题】:random_state parameter in classification models分类模型中的 random_state 参数
【发布时间】:2016-06-26 23:08:25
【问题描述】:

谁能解释一下为什么 random_state 参数对模型的影响如此之大?

我有一个 RandomForestClassifier 模型,并且想要设置 random_state(用于可重复性浇注),但根据我使用的值,我的总体评估指标(F1 分数)得到了非常不同的值

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

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

想法?

【问题讨论】:

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


    【解决方案1】:

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

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

    总结一下,你能做什么?

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

    【讨论】:

    • 非常感谢您的解释,你是对的,增加树的数量,确实减少了最大和最小 f1 分数之间的差异。我提到的示例有 10 个,100 个 diff 下降到 0.08 和 0.04 个 200。你能解释一下“在评估期间将 random_seed 作为超参数”是什么意思吗?再次感谢
    • 另一个问题,这似乎只发生在“与树相关的模型”中。我想它会发生在所有集成模型中,但它不会发生在例如 AdaBoostClassifier 或 GradientBoostingClassifier 中,即使它们具有 random_state 参数(始终输出相同的结果,独立于 random_state)
    • 可以说,将随机种子视为超参数听起来很奇怪。
    猜你喜欢
    • 2019-03-25
    • 1970-01-01
    • 1970-01-01
    • 2018-09-21
    • 1970-01-01
    • 1970-01-01
    • 2017-09-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多