【Matlab】-- 机器学习项目 - 基于XGBoost算法的数据回归预测
文章目录
文章目录
- 01 内容概要
- 02 部分代码
- 03 代码解读
- 04 运行结果
- 05 基于XGBoost算法的数据回归预测源码
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代码下载地址