基于Stacking集成学习的数据回归预测(4种基学习器PLS、SVM、决策、KNN,多种元学习器比选)MATLAB代码:
一、研究背景
- 集成学习是机器学习中提高预测精度和泛化能力的重要方法
- Stacking(堆叠)是一种双层集成策略,通过组合多个基学习器的预测结果,再由元学习器进行最终预测
- 适用于解决复杂回归问题,特别是在单一模型性能有限时
二、主要功能
- 数据预处理:读取Excel数据、标准化处理、数据集划分
- 多模型训练:训练4种基学习器(PLS、SVM、决策树、KNN)
- Stacking集成:构建元特征、训练元学习器
- 模型评估:多维度性能比较、提升分析
- 可视化分析:多种图形展示预测效果
- 模型保存:保存最佳集成模型
三、算法步骤
- 数据准备→ 标准化 → 划分训练/验证/测试集(60%/20%/20%)
- 基学习器训练:
- PLS:交叉验证选择最佳成分数
- SVM:网格搜索优化参数
- 决策树和KNN:增加模型多样性
- 元特征构建:
- 基学习器预测值
- 交互特征(预测值乘积)
- 统计特征(标准差、极差)
- 元学习器选择:
- 候选:随机森林、梯度提升、线性回归、岭回归
- 基于验证集MSE选择最佳
- 加权组合策略:基于性能的权重分配
- 性能评估与可视化
四、技术路线
原始数据 → 标准化 → 基学习器训练 → 元特征构建 → 元学习器训练 → 集成预测 ↓ ↓ ↓ ↓ ↓ ↓ 数据预处理 PLS/SVM/ 预测结果 特征工程 模型选择 最终输出 决策树/KNN 交互/统计 (RF/GB/线性)五、公式原理
1.Stacking核心思想:
y^stacking=fmeta(h1(x),h2(x),...,hT(x)) \hat{y}_{\text{stacking}} = f_{\text{meta}}(h_1(x), h_2(x), ..., h_T(x))y^stacking=fmeta(h1(x),h2(x),...,hT(x))
其中hih_ihi是基学习器,fmetaf_{\text{meta}}fmeta是元学习器
2.加权组合权重:
wi=1MSEi+ϵ/∑j=1T1MSEj+ϵ w_i = \frac{1}{MSE_i + \epsilon} / \sum_{j=1}^{T} \frac{1}{MSE_j + \epsilon}wi=MSEi+ϵ1/j=1∑TMSEj+ϵ1
3.性能指标:
- MSE:均方误差
- R²:决定系数
- MAE:平均绝对误差
- MAPE:平均绝对百分比误差
六、参数设定
基学习器参数:
- PLS:成分数1-15,5折交叉验证
- SVM:C=[0.01,0.1,1,10,100,1000],gamma=[0.001,0.01,0.1,1,10]
- 决策树:MinParentSize=10,MaxNumSplits=100
- KNN:NumNeighbors=5,距离度量=欧式
元学习器参数:
- 随机森林:100棵树,MinLeafSize=10
- 梯度提升:100轮,学习率0.1
- 岭回归:Lambda=0.1
七、运行环境
- 软件:MATLAB(需要Statistics and Machine Learning Toolbox)
- 数据格式:Excel文件(最后一列为目标变量)
- 建议配置:MATLAB R2020b或更高版本
八、应用场景
- 金融预测:股票价格、汇率预测
- 工业预测:设备故障预测、产量预测
- 医疗预测:疾病风险预测、治疗效果评估
- 商业预测:销售额预测、客户流失预测
- 科学研究:实验数据建模、参数优化
九、创新点
- 元特征工程:添加交互特征和统计特征
- 多样性增强:使用不同类型的基学习器
- 双策略对比:同时实现Stacking和加权组合
- 全面评估:包含相关性分析和多样性评估
- 可视化丰富:多种图形展示预测效果
十、注意事项
- 需要根据实际数据调整基学习器参数
- 基学习器相关性过高会降低Stacking效果
- 数据标准化对SVM和PLS等模型很重要
- 验证集用于模型选择,避免过拟合
===数据准备和预处理===数据集划分:训练集:61,验证集:20,测试集:22===训练基学习器(增加多样性)===1.训练PLS模型...PLS最佳成分数:3PLS验证集MSE:0.1101312.训练SVM模型(改进网格搜索)...SVM最佳参数:C=10.00,gamma=0.100SVM验证集MSE:0.0303253.训练决策树模型(增加多样性)...决策树验证集MSE:0.3546984.训练KNN模型(增加多样性)...KNN验证集MSE:0.569963===创建元特征(关键优化)===添加交互特征...添加统计特征...元特征维度:61×9===训练和选择元学习器===尝试元学习器:RF...RF验证集MSE:0.054018尝试元学习器:LSBoost...LSBoost验证集MSE:0.058475尝试元学习器:Linear...Linear验证集MSE:0.037861尝试元学习器:Ridge...Ridge验证集MSE:0.061026最佳元学习器:Linear(MSE:0.037861)===尝试加权组合策略===加权组合验证集MSE:0.043765==========性能评估==========Model MSE RMSE MAE R2 R2_adj MAPE ___________________ ________ _______ _______ ________ _______ ______{'PLS'}0.0985320.31390.226490.854120.74472136.37{'SVM'}0.0368680.192010.1440.945420.9044853.393{'决策树'}0.300470.548150.43170.555160.22153174.11{'KNN'}1.00191.0010.81251-0.48332-1.5958283.99{'加权组合'}0.0427450.206750.166260.936720.8892561.93{'Stacking-Linear'}0.0488990.221130.153420.927610.8733154.919最佳模型:SVM(MSE:0.036868,R²:0.9454)==========Stacking性能提升分析==========相对于 PLS:MSE提升:50.37% (从 0.098532 降到 0.048899)R²提升:8.60% (从 0.8541 提升到 0.9276)✓ Stacking性能优于PLS 相对于 SVM:MSE提升:-32.63% (从 0.036868 降到 0.048899)R²提升:-1.88% (从 0.9454 提升到 0.9276)✗ SVM性能优于Stacking 相对于 决策树:MSE提升:83.73% (从 0.300466 降到 0.048899)R²提升:67.09% (从 0.5552 提升到 0.9276)✓ Stacking性能优于决策树 相对于 KNN:MSE提升:95.12% (从 1.001909 降到 0.048899)R²提升:291.92% (从 -0.4833 提升到 0.9276)✓ Stacking性能优于KNN==========Stacking性能深入分析==========基学习器预测结果之间的相关系数矩阵:PLS SVM 决策树 KNN _______ _______ _______ _______ PLS10.916750.849940.59847SVM0.9167510.832150.65719决策树0.849940.8321510.8133KNN0.598470.657190.81331平均相关系数:0.7780提示:基学习器预测中度相关(0.5-0.8),Stacking可能有一定收益 基学习器多样性分析(误差与其他预测的相关性):PLS:0.1034SVM:0.3242决策树:0.2940KNN:0.2462公众号:机器学习之心HML 公众号:机器学习之心HML 公众号:机器学习之心HML==========可视化结果==========可视化完成!==========模型保存==========优化后的Stacking模型已保存到 optimized_stacking_model.mat 最佳模型:Stacking-Linear 测试集R²:0.9276已保存:结果/图1.png 已保存:结果/图2.png 已保存:结果/图3.png 已保存:结果/图4.png 已保存:结果/图5.png 已保存:结果/图6.png 已保存:结果/图7.png 已保存:结果/图8.png 已保存:结果/图9.png 已保存:结果/图10.png 已保存:结果/图11.png 已保存:结果/图12.png 已保存:结果/图13.png 已保存:结果/图14.png 已保存:结果/图15.png>>