1. 基本参数
2. 袋外估计
随机森林在构建每棵树时,采用有放回抽样,即从原始训练集中有放回地随机抽取样本,这样可能会存在一些未被抽到的样本集,称为袋外数据(OOB 数据)。
对于每棵树而言,用对应的 OOB 数据进行预测,然后对整个随机森林所有树的 oob 预测结果进行评估,比如计算分类问题中的准确率或回归问题中的均方误差等,这个评估值就是 oob score。
oob score 的优点在于它可以在不使用额外的验证集的情况下,对随机森林模型的性能进行估计,有助于了解模型的泛化能力。
简言之:使用 oob 数据对随机森林泛化能力进行评估。
from sklearn.ensemble import RandomForestClassifier if __name__ == '__main__': # 开启 oob score 计算需要设置以下两个参数 # bootstrap 设置为 True # oob_score 设置为 True # 以下参数会影响到 oob score 的计算 # max_samples 有放回采样的样本数量,会影响到 oob 样本的数量 # n_estimators 会影响到有放回采样的次数 rf = RandomForestClassifier(n_estimators=3, max_features=None, bootstrap=True, oob_score=True, random_state=42)
具体的计算过程是什么样的?
假设一个二分类问题,训练集有 0、1、2、3、4、5、6、7、8、9 共计 10 个样本,随机森林需要训练 3 个基学习器构成强学习器,每个基学习器的 oob 样本集如下:
- 第一个基学习器:0、4、5
- 第二个基学习器:2、5、6、7
- 第三个基学习器:0、4、5
表格数据含义如下:
- 基学习器列表示某个基学习器对其 oob 样本的预测标签
- 预测标签表示该样本的预测标签(多数标签)
这里需要重点注意:
- scikit-learn 中随机森林实现中,oob 是基于所有的训练数据进行
- 即使某个样本不存在于 oob 中,也会参与到 oob score 的计算
- 太少的基学习器可能会导致某些训练样本无法有效参与 oob score 计算
最后,对于 oob score:
- 并非完全准确。虽然 oob score 可以提供一个性能评估的参考,但它并不是完全准确的。它只是对模型性能的一个近似估计,与使用独立验证集进行评估可能存在一定的差异。
- 评估分数不稳定。oob score 的计算结果可能会受到随机抽样的影响,具有一定的不稳定性。不同的随机抽样结果可能会导致不同的 oob score。为了减少这种不稳定性,可以多次计算 oob score 并取平均值,但这也会增加计算成本。