分类模型中的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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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