You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pipeline中实现RandomForestRegressor并获取OOB分数?

在Pipeline中使用RandomForestRegressor并获取OOB分数

你的代码思路没问题,报错原因很直接:oob_score_是RandomForestRegressor模型实例的属性,而不是Pipeline对象的属性,所以直接访问rand_piped.oob_score_会触发AttributeError。

正确的获取方式

要拿到OOB分数,你需要先定位到Pipeline里的RandomForestRegressor组件,再访问它的oob_score_属性。有两种常用写法:

  • 通过named_steps字典按组件名称获取:rand_piped.named_steps['model'].oob_score_
  • 直接用索引访问(仅适用于scikit-learn 0.21及以上版本):rand_piped['model'].oob_score_

修正后的完整代码

# 构建Pipeline
rand_piped = Pipeline([
    ('preprocessor', preprocessor),
    ('model', RandomForestRegressor(max_depth=3, random_state=0, oob_score=True))
])

# 拟合模型
rand_piped.fit(df_X_train, df_Y_train.values.ravel())

# 正确获取OOB分数
oob_score = rand_piped.named_steps['model'].oob_score_
print(f"OOB分数: {oob_score}")

额外说明

  • 你的预处理流程不会影响OOB分数的正确性:Pipeline在执行fit时,会先对训练数据执行预处理,再将预处理后的数据集传入RandomForestRegressor,模型内部会基于预处理后的数据集计算OOB分数,完全符合预期逻辑。
  • 如果后续用GridSearchCV等工具包装这个Pipeline,要注意需要通过grid_search.best_estimator_.named_steps['model'].oob_score_来获取最优模型的OOB分数。

内容的提问来源于stack exchange,提问作者Gaspard_Boyer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 12:45:35