如何使用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
相关产品推荐
相关产品推荐

