分类模型中的random_state参数

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

我有一个RandomForestClassifier模型,想设置random_state参数(为了可重复性),但根据我使用的不同值,我的整体评估指标(F1分数)会有很大差异。

例如,我尝试用100个不同的random_state值来拟合同一个模型,训练和测试后,最小的F1分数是0.64516129,最大的F1分数是0.808823529。这是一个巨大的差异。

这种行为似乎也使得比较两个模型变得非常困难。

有什么想法吗?


回答:

如果random_state影响你的结果,这意味着你的模型具有高方差。在随机森林的情况下,这简单地意味着你使用的森林太小了,应该增加树的数量(通过装袋方法来减少方差)。在scikit-learn中,这是通过构造函数中的n_estimators参数来控制的。

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

总结一下,你可以做些什么?

  • 增加树的数量——这必须有效,并且是一种被很好理解和证明的方法
  • 在评估过程中将random_seed视为一个超参数,因为这正是它——你需要事先确定的元知识,如果你不想增加森林的大小的话。

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注