python-3.x - 如何从回归问题的 OOB 分数估计 OOB 错误率
问题描述
我在 sklearn,python 中使用随机森林回归包。我的数据集包含 146 个训练样本和 38 个测试样本。我已经训练了模型,但我想通过改变 num_features 来绘制带有树数的 OOB 错误率。将选择对特定数量的树给出最小 OOB 误差的曲线作为测试集的最佳模型参数。
我将OOB错误率计算为(1-OOB分数)。但最佳曲线的 OOB 错误率从 0.8 下降到 0.625。这意味着即使有大量树木(300),我的 OOB 分数也没有太大提高。我想知道我是否遵循正确的程序来绘制 OOB 错误率。以及如何提高我的随机森林模型的性能
ensemble_clfs = [
("max_features=1",
RandomForestRegressor(n_estimators=125,max_depth=5,min_samples_split=6,
warm_start=True,max_features=1,min_samples_leaf=3,
oob_score=True,random_state=42)),
("max_features=2",
RandomForestRegressor(n_estimators=125,max_depth = 5,min_samples_split=8,
warm_start=True, max_features=2,min_samples_leaf=3,
oob_score=True,
random_state=42)),
("max_features=3",
RandomForestRegressor(n_estimators=125,max_depth
=5,min_samples_split=8,
warm_start=True, max_features=3,min_samples_leaf=3,
oob_score=True,
random_state=42))
]
error_rate = OrderedDict((label, []) for label, _ in ensemble_clfs)
min_estimators = 10
max_estimators = 300
for label, clf in ensemble_clfs:
for i in range(min_estimators, max_estimators + 1):
clf.set_params(n_estimators=i)
clf.fit(X, Y)
# Record the OOB error for each `n_estimators=i` setting.
''''''
oob_error = 1 - clf.oob_score_
error_rate[label].append((i, oob_error))
''''''
我希望 OOB 错误率尽可能低,可能高达 0.1,这表明我的验证是准确的。这样我就可以将它应用于测试集OOB 错误率与树的数量
解决方案
推荐阅读
- c++ - 自定义字符串排序给出分段错误
- laravel-5 - Laravel 本地化语言切换器使用 currentRouteName 传递参数
- javascript - 使用纯 jQuery 的碰撞检测没有提供所需的输出
- bash - “for” loop to get status of the service in bash script
- testing - 具有数据属性的选择器
- python - 使用beautifulsoup 直接抓取HTML 表格?
- javascript - Chrome 调试控制台窗口上的“http://localhost:5005/socket.io/?&transport=polling&t=" 错误
- copy - XCOPY 命令将文件复制到 SAN 存储
- angular - NgRx 测试 - NullInjectorError: No provider for Service
- python - 在python中实现解析器的自顶向下递归下降法