随机森林的袋外误差分析

随机森林分类器(RandomForestClassifier)在训练时采用了自助采样聚合方法,即每棵树都是基于训练样本的一个自助样本来拟合的。所谓的袋外误差(out-of-bag, OOB),是指在计算每个训练样本z_i = (x_i, y_i)的平均误差时,只使用那些在构建树时没有包含z_i的自助样本中的树来进行预测。这种方法允许在训练过程中同时完成模型的拟合和验证。

下面的例子展示了在训练过程中,每增加一棵树时如何测量OOB误差。通过生成的图表,实践者可以估计一个合适的n_estimators值,在这个值下误差趋于稳定。

为了实现这一过程,首先需要生成一个二分类数据集。然后,创建了几个不同参数设置的随机森林分类器,并在训练过程中跟踪它们的OOB误差轨迹。通过这种方式,可以观察到随着树的数量增加,误差是如何变化的,并据此选择一个合适的树的数量。

在下面的Python代码示例中,首先导入了必要的库,并设置了随机状态以确保结果的可重复性。然后,生成了一个具有500个样本和25个特征的二分类数据集。接着,定义了几个随机森林分类器,每个分类器都有不同的max_features参数设置,并启用了warm_startoob_score选项。

from collections import OrderedDict import matplotlib.pyplot as plt from sklearn.datasets import make_classification from sklearn.ensemble import RandomForestClassifier RANDOM_STATE = 123 # 生成一个二分类数据集。 X, y = make_classification( n_samples=500, n_features=25, n_clusters_per_class=1, n_informative=15, random_state=RANDOM_STATE, ) ensemble_clfs = [ ("RandomForestClassifier, max_features='sqrt'", RandomForestClassifier( warm_start=True, oob_score=True, max_features="sqrt", random_state=RANDOM_STATE, )), ("RandomForestClassifier, max_features='log2'", RandomForestClassifier( warm_start=True, max_features="log2", oob_score=True, random_state=RANDOM_STATE, )), ("RandomForestClassifier, max_features=None", RandomForestClassifier( warm_start=True, max_features=None, oob_score=True, random_state=RANDOM_STATE, )), ] # 将分类器名称映射到(n_estimators, 错误率)对的列表。 error_rate = OrderedDict((label, []) for label, _ in ensemble_clfs) # 探索n_estimators值的范围。 min_estimators = 15 max_estimators = 150 for label, clf in ensemble_clfs: for i in range(min_estimators, max_estimators + 1, 5): clf.set_params(n_estimators=i) clf.fit(X, y) # 记录每个n_estimators=i设置的OOB误差。 oob_error = 1 - clf.oob_score_ error_rate[label].append((i, oob_error)) # 生成"OOB错误率"与"n_estimators"的图表。 for label, clf_err in error_rate.items(): xs, ys = zip(*clf_err) plt.plot(xs, ys, label=label) plt.xlim(min_estimators, max_estimators) plt.xlabel("n_estimators") plt.ylabel("OOB错误率") plt.legend(loc="upper right") plt.show()

通过上述代码,可以看到随着树的数量增加,OOB错误率是如何变化的。这有助于选择一个合适的树的数量,以达到较好的模型性能。此外,通过观察OOB错误率的下降趋势,还可以对模型的泛化能力有一个初步的估计。

总的来说,随机森林的OOB误差是一个有用的工具,它允许在不使用单独的验证集的情况下,对模型进行有效的验证。这种方法特别适合于那些难以划分出独立验证集的场景,或者当希望简化模型训练和验证流程时。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485