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

如何使用RandomizedSearchCV调优sklearn的StackingRegressor基学习器参数

StackingRegressor基学习器超参数调优方案

错误原因

你遇到的报错核心是StackingRegressor的estimators参数格式不符合要求:该参数需要接收**(自定义名称字符串,模型实例)格式的元组组成的列表**,你直接传入了模型实例列表,sklearn无法为基学习器绑定参数前缀,因此rfr__max_depth这类参数路径无法被正确识别,触发属性错误。

正确实现代码

from sklearn.datasets import load_diabetes
from sklearn.model_selection import RandomizedSearchCV
from sklearn.ensemble import RandomForestRegressor, GradientBoostingRegressor, StackingRegressor

X, y = load_diabetes(return_X_y=True)

# estimators按 (自定义名称, 模型实例) 格式定义元组列表
estimators = [
    ('rfr', RandomForestRegressor()),
    ('gbr', GradientBoostingRegressor())
]
sreg = StackingRegressor(estimators=estimators)

# 参数前缀与estimators中定义的名称一一对应
params = {
    'rfr__max_depth': [3, 5, 10, 100],
    'gbr__max_depth': [3, 5, 10, 100],
    # 如需调优Stacking的最终元学习器参数,使用final_estimator__前缀即可,示例:
    # 'final_estimator__alpha': [0.1, 1, 10]
}

grid = RandomizedSearchCV(
    estimator=sreg, 
    param_distributions=params,
    cv=3,
    n_iter=8 # 可自定义搜索迭代次数,默认值为10
)
grid.fit(X,y)

# 输出搜索得到的最优参数
print(grid.best_params_)

补充说明

  • 所有基学习器的参数都可以通过[自定义名称]__[参数名]的格式配置搜索空间,双下划线为sklearn的参数路径固定分隔符
  • StackingRegressor默认使用RidgeCV作为元学习器,如果你自定义了元学习器,同样可以用final_estimator__[参数名]的格式配置其搜索空间

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 10:54:05