【图文通俗带示例】StackingRegressor和StackingCVRegressor原理详解

在大学的数学建模比赛中能明显提分的模型融合算法,本文介绍集成算法中的一种Stacking模型融合。通过PPT解释了Stacking回归算法进行模型融合的基本原理,并且结合mlxtend库中的源代码做出了基础解释。下方给出了示例代码可供直接调用

StackingRegressor源码解析: 

StackingCVRegressor源码解析: 

上述过程就是Stacking回归算法的基本原理,实际上的过程十分简单,但是可创造性很强,可以根据自己的需求对这种思想做创新。

知道了原理,mlxtend库给我们封装好了完整的Stacking回归的算法,接下来我们就给出一个交叉验证方式的示例代码:

import numpy as np
import pandas as pd
# 导入catboost
from catboost import CatBoostRegressor
# 随机森林库
from sklearn.ensemble import RandomForestRegressor
# 导入lightGBM
import lightgbm as lgb
# 引入stacking模型融合(cv)
from mlxtend.regressor import StackingCVRegressor
from sklearn.linear_model import LinearRegression
# 用于保存和提取模型
import joblib
import matplotlib.pyplot as plt
# 解决画图中文字体显示的问题
plt.rcParams['font.sans-serif'] = ['KaiTi', 'SimHei', 'Times New Roman']  # 汉字字体集
plt.rcParams['font.size'] = 12  # 字体大小
plt.rcParams['axes.unicode_minus'] = False

# 加载数据集并将其拆分为训练集和测试集
#读取数据
traindf=pd.read_csv('./train.csv',encoding='gbk')#这里的训练集包括目标特征
testdf=pd.read_csv('./test.csv',encoding='gbk')#测试集不包括

# 目标变量
y = traindf['Label']
del traindf['Label']
# 特征
X = traindf

# 读取模型
# 基模型1
LGBMR_BEST_PARAMS = lgb.LGBMRegressor(bagging_fraction=0.8,
                                  bagging_freq=1,
                                  feature_fraction=0.9000000000000001,
                                  lambda_l1=0,
                                  lambda_l2=15,
                                  learning_rate=0.29352291475392334,
                                  max_bin=205,
                                  max_depth=10,
                                  min_data_in_leaf=98,
                                  min_gain_to_split=0.003127047743666289,
                                  n_estimators=645,
                                  num_leaves=70)
# 基模型2
cat_params= {'iterations': 992,
         'learning_rate': 0.2462181777526843,
         'depth': 11,
         'l2_leaf_reg': 0.006126980082076129,
         'rsm': 0.42416637312752437,
         'border_count': 173,
         'leaf_estimation_method': 'Simple',
         'boosting_type': 'Ordered',
         'bootstrap_type': 'MVS',
         'sampling_unit': 'Object'}
CATBOOST_BEST_PARAMS = CatBoostRegressor(**cat_params)
# 基模型3
RF = RandomForestRegressor()

# 元回归器, 这个可以理解为第二层的那个模型,即将前面回归器结果合起来的那个回归器,这里我使用lr,因为第二层的模型不要太复杂
lr=LinearRegression()
# 基模型列表
regressorModels = [ LGBMR_BEST_PARAMS,CATBOOST_BEST_PARAMS, RF]
# 使用stackingCV融合
STACKING=StackingCVRegressor(regressors=regressorModels,meta_regressor=lr,cv = 5,shuffle = True,use_features_in_secondary = False,n_jobs=-1)

# 模型训练
# 注意模型的训练需要使用完整的训练集
STACKING.fit(X,y)

# # 保存模型
# joblib.dump(STACKING, './STACKING.pkl')
# # 读取模型
# STACKING = joblib.load('./STACKING.pkl')

# 模型预测
# 用模型对测试集预测
y_pred = STACKING.predict(testdf)
# # 预测结果进行逆log运行
# y_pred=np.expm1(y_pred)

# 读取真实集---shape=(n,1)
label=pd.read_csv('./true.csv',encoding='gbk')

# 模型评估
import numpy as np
from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score
# 计算均方误差(MSE)
mse = mean_squared_error(label, y_pred)
print("均方误差(MSE):", mse)

# 计算均方根误差(RMSE)
rmse = np.sqrt(mse)
print("均方根误差(RMSE):", rmse)

# 计算平均绝对误差(MAE)
mae = mean_absolute_error(label, y_pred)
print("平均绝对误差(MAE):", mae)

# 计算决定系数(R²)
r2 = r2_score(label, y_pred)
print("决定系数(R²):", r2)

 在这个示例需要根据实际情况修改某些路径和特征名称。

个人拙见,有错误可留言我修改,需要原PPT的可以点击方链接:

PPT:https://pan.baidu.com/s/13fC8epQdK0wMFvydutDUDw        提取码:xbjt

  • 7
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值