如何嵌套使用Sklearn多回归模型,实现TPOT输出的堆叠回归结构
实现TPOT嵌套回归模型的操作方法
TPOT输出的嵌套结构本质是层级堆叠回归,执行顺序从最内层模型向外层逐层计算,上一层模型的输出作为下一层模型的输入。你给出的结构执行顺序为:最内层
XGBRegressor(**args1)→ 中间层XGBRegressor(**args2)→ 最外层RandomForestRegressor(**args3)
方法1:手动逐层实现(适合理解逻辑)
先替换代码中args1/args2/args3为TPOT输出的实际参数值,再按如下逻辑编写代码:
from xgboost import XGBRegressor from sklearn.ensemble import RandomForestRegressor from sklearn.model_selection import train_test_split # 替换为TPOT输出的实际参数 args1 = {...} args2 = {...} args3 = {...} # 初始化各层模型 xgb1 = XGBRegressor(**args1) xgb2 = XGBRegressor(**args2) rf = RandomForestRegressor(**args3) # 替换为你自己的特征集X、标签y X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 第一层:训练最内层xgb1,输出训练/测试集的预测结果 xgb1.fit(X_train, y_train) xgb1_train_pred = xgb1.predict(X_train) xgb1_test_pred = xgb1.predict(X_test) # 第二层:用xgb1的预测结果作为xgb2的输入,训练xgb2 xgb2.fit(xgb1_train_pred.reshape(-1, 1), y_train) xgb2_train_pred = xgb2.predict(xgb1_train_pred.reshape(-1, 1)) xgb2_test_pred = xgb2.predict(xgb1_test_pred.reshape(-1, 1)) # 第三层:用xgb2的预测结果作为随机森林的输入,训练最终模型 rf.fit(xgb2_train_pred.reshape(-1, 1), y_train) # 执行最终预测 y_pred = rf.predict(xgb2_test_pred.reshape(-1, 1))
方法2:用Sklearn官方API封装(符合规范,调用方便)
使用StackingRegressor嵌套封装,直接兼容Sklearn的fit/predict接口:
from xgboost import XGBRegressor from sklearn.ensemble import RandomForestRegressor, StackingRegressor from sklearn.model_selection import train_test_split # 替换为TPOT输出的实际参数 args1 = {...} args2 = {...} args3 = {...} # 内层堆叠:xgb1为基学习器,xgb2为元学习器 inner_stack = StackingRegressor( estimators=[('xgb1', XGBRegressor(**args1))], final_estimator=XGBRegressor(**args2), passthrough=False ) # 外层堆叠:内层堆叠作为基学习器,随机森林为最终元学习器 full_model = StackingRegressor( estimators=[('inner_stack', inner_stack)], final_estimator=RandomForestRegressor(**args3), passthrough=False ) # 直接正常训练预测即可 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) full_model.fit(X_train, y_train) y_pred = full_model.predict(X_test)
注意事项
- 若需要和TPOT的评估结果完全对齐,要和TPOT使用相同的数据集拆分规则、随机种子、评估指标,避免结果偏差。
- 如果TPOT输出的结构要求将前层输出和原始特征拼接作为下一层输入,把
passthrough参数改为True即可。
内容的提问来源于stack exchange,提问作者Debayan Paul
相关产品推荐
相关产品推荐

