scikit-learn 的 RandomForestRegressor 是否可能出现负 OOB 分数?

机器算法验证 随机森林 scikit-学习 样本外
2022-04-05 20:09:37

我目前正在用 Python 实现 scikit-learn 的RandomForestRegressor,并且正在为为什么我偶尔会得到负的袋外分数而摸不着头脑。据我所知,从属性“_oob_score”(“使用袋外估计获得的训练数据集的分数”)的给定描述以及我迄今为止阅读的所有内容中,袋外评分应该是正值。

额外信息:

  • 我得到的所有分数,无论是正面的还是负面的,都非常小(< 0.001;很多都是 < 0.0001)。我也不确定这是否正常,但总的来说反应也很小。

  • 我正在使用 500 棵树,并使用不同的 min_samples_leaf 和 max_features。当 min_samples_leaf 超过 ~500 时,我似乎得到了负值。

  • 大约有一百个布尔列被创建来处理分类数据(因此相当稀疏)。相比之下,还有大约 10 个其他数字列。Null 值已用一个大的负数作为数字占位符填充。

  • 我的数据大小约为 1,000,000 行,其中 65% 用于训练数据,其余用于测试。

  • (我可以提供任何其他信息来提供帮助吗?)

是否有随机森林的袋外得分的统计解释/定义,人们预计负得分是可能的,或者这更有可能是程序的怪癖?

1个回答

RandomForestRegressoroob_score_属性是袋外样本的分数scikit-learn 使用“score”来表示“衡量模型有多好”之类的东西,这对于不同的模型是不同的。对于(与大多数回归模型一样),它是确定系数,正如方法的文档RandomForestRegressor所见score()

这被定义为,其中是回归的平方和误差的平方和误差(其中总和在测试实例的范围内)。(1u/v)uu=i(yiy^i)2vv=i(yiy¯)2

,这个度量确实可以是负的,即你的模型比最好的常数预测器更差。这意味着您的模型很烂;通常模型会得到积极的分数。0.0001 或其他分数意味着您的模型仅最佳常数预测器好一点。u>v