在这里插入图片描述

文章目录

01 内容概要

XGBoost属于集成学习中的Boosting方法,其基本思想是:
逐步构建多个弱学习器(通常是CART决策树),每一棵树都试图纠正前一棵树的残差(预测误差),最终将所有树的输出加权求和,得到强学习器。

02 部分代码

%%  清空环境变量
warning off             % 关闭报警信息
close all               % 关闭开启的图窗
clear                   % 清空变量
clc                     % 清空命令行
%%  导入数据
res = xlsread('数据集.xlsx');
%%  划分训练集和测试集
temp = randperm(103);
P_train = res(temp(1: 80), 1: 7)';
T_train = res(temp(1: 80), 8)';
M = size(P_train, 2);
P_test = res(temp(81: end), 1: 7)';
T_test = res(temp(81: end), 8)';
N = size(P_test, 2);
%%  数据归一化
[p_train, ps_input] = mapminmax(P_train, 0, 1);
p_test = mapminmax('apply', P_test, ps_input);
[t_train, ps_output] = mapminmax(T_train, 0, 1);
t_test = mapminmax('apply', T_test, ps_output);
%%  建立模型
model = xgboost_train(p_train, t_train, params, num_trees);
%%  预测
t_sim1 = xgboost_test(p_train, model);
t_sim2 = xgboost_test(p_test , model);

03 代码解读

下面把代码拆成 8 个关键动作,每步用 2-3 句话“展开”说明,方便你快速对应到脚本里的位置。
1.清空环境
关掉弹窗、清变量、清命令行,防止上一趟跑完的图或数据干扰这次结果。
2.读 Excel
xlsread 把整个数字区域一次性读进矩阵 res,行是样本,列是“7 个特征 + 1 个目标”。
3.随机拆 80/23
randperm(103) 做随机索引,前 80 行当训练集,后 23 行当测试集,避免人为挑数据带来的偏倚。
4.归一化到 0-1
mapminmax 把 7 维特征和 1 维目标分别线性压缩到 [0,1];训练集得到的“映射结构” ps_input/ps_output 会被保存下来,保证测试集和反归一化时用的是同一套比例,防止信息泄露。
5.搭 XGBoost 参数并训练
把学习率、树深度、任务类型(reg:linear)写进结构体 params,再告诉它迭代 100 轮;xgboost_train 返回的 model 就是一棵“加法树” ensemble。
6.预测 + 反归一化
用 xgboost_test 对训练集和测试集各跑一次,得到 0-1 区间的预测值;接着用 mapminmax('reverse', ...) 把数据拉回原始量纲,才能跟真实值算误差。
7.算误差、画两张折线
RMSE 看整体偏差,R² 看拟合度,MAE 看平均绝对误差,MBE 看系统偏高还是偏低;折线图把真实值与预测值按样本顺序摆在一起,一眼就能瞧见哪里跑偏。
8.画散点图
横轴真值、纵轴预测,理想情况下点应落在对角线上;散点图比折线图更能直观看出“在哪个区间模型容易高估或低估”。

04 运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

05 基于XGBoost算法的数据回归预测源码

提供了Matlab的实现代码,使得用户可以根据自己的需求进行调整和应用。
Matlab代码下载地址
在这里插入图片描述

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐