基于XGBoost的多变量回归预测系统(MATLAB实现) 简介
基于XGBoost的多变量回归预测系统(MATLAB实现)简介本资料包提供了一个完整的基于XGBoost的多输入多输出回归建模与预测系统,由MATLAB实现,适用于负载预测、能源管理、价格建模等多个工程与科研场景。核心内容包括:main_xgboost.m:主程序文件,用于训练和预测全过程控制。data_process.m:数据预处理模块,支持原始数据清洗、标准化与特征构造。xgboost_tra
基于XGBoost的多变量回归预测系统(MATLAB实现)
简介
本资料包提供了一个完整的基于XGBoost的多输入多输出回归建模与预测系统,由MATLAB实现,适用于负载预测、能源管理、价格建模等多个工程与科研场景。
核心内容包括:
main_xgboost.m:主程序文件,用于训练和预测全过程控制。
data_process.m:数据预处理模块,支持原始数据清洗、标准化与特征构造。
xgboost_train.m / xgboost_test.m:训练与测试模块,封装了核心模型调用。
calc_error.m:误差分析模块,支持MAE、RMSE等多种评估指标。
XGBOOST.mat:模型训练结果与参数存档,方便复现实验。
数据集.xlsx:示例数据集,支持直接上手运行。
xgboost.dll / xgboost.h / mingw.mlpkginstall:XGBoost在MATLAB中的接口配置包,确保高效模型运行。
特点优势:
原生支持多输入多输出回归任务;
提供完整的代码框架,适合快速二次开发;
包含从数据加载、预处理、模型训练到误差评估的全流程;
可用于科研建模、课程教学与工程应用。
本项目适合电力负荷预测、碳排放建模、能源价格预测等典型多变量回归任务,特别推荐给研究人工智能在能源领域应用的科研人员与开发者。
基于 XGBoost 的多变量回归预测系统(MATLAB 实现) 的完整代码框架。由于 MATLAB 官方不原生支持 XGBoost,需借助 XGBoost 的 C API + MEX 编译接口(xgboost.dll、xgboost.h 等),但为便于你快速上手
✅ 兼容 MATLAB R2019a 及以上
✅ 支持多输入 → 多输出(MIMO)回归
✅ 包含数据预处理、训练、测试、评估全流程
✅ 使用官方推荐的 xgboost-matlab 接口方式(通过 loadlibrary 或 MEX)
⚠️ 注意:XGBoost 在 MATLAB 中需额外配置编译环境(MinGW-w64),若未配置成功,可先用 替代方案(如 fitrensemble 模拟 XGBoost 行为) 进行演示。
✅ 完整代码包结构(可直接运行)
- data_process.m —— 数据预处理
matlab
function [X_train, Y_train, X_test, Y_test, scalerX, scalerY] = data_process(data, train_ratio)
% 输入:data (N×(p+q)),前p列为输入特征,后q列为输出目标
% 输出:标准化后的训练/测试集
if nargin < 2, train_ratio = 0.8; end
[N, ~] = size(data);
split_idx = floor(N train_ratio);
% 分离输入输出
p = size(data,2) - size(data,2)/2; % 假设输入输出维度相等,可修改
X = data(:, 1:p);
Y = data(:, p+1:end);
% 划分
X_train_raw = X(1:split_idx, 😃;
Y_train_raw = Y(1:split_idx, 😃;
X_test_raw = X(split_idx+1:end, 😃;
Y_test_raw = Y(split_idx+1:end, 😃;
% 标准化(Z-score)
scalerX = zscore(X_train_raw);
X_train = (X_train_raw - mean(X_train_raw)) ./ std(X_train_raw);
X_test = (X_test_raw - mean(X_train_raw)) ./ std(X_train_raw);
scalerY = zscore(Y_train_raw);
Y_train = (Y_train_raw - mean(Y_train_raw)) ./ std(Y_train_raw);
Y_test = (Y_test_raw - mean(Y_train_raw)) ./ std(Y_train_raw);
% 处理 NaN / Inf
X_train(isnan(X_train)) = 0;
X_test(isnan(X_test)) = 0;
Y_train(isnan(Y_train)) = 0;
Y_test(isnan(Y_test)) = 0;
end
- xgboost_train.m —— 训练模块(使用 XGBoost-MATLAB 接口)
matlab
function model = xgboost_train(X_train, Y_train, params)
% 支持多输出:对每个输出变量单独训练一个XGBoost模型
if nargin < 3
params = struct();
params.max_depth = 6;
params.eta = 0.3;
params.subsample = 0.8;
params.colsample_bytree = 0.8;
params.num_round = 100;
params.objective = ‘reg:squarederror’;
end
[q, ~] = size(Y_train); % q个输出
model.models = cell(q, 1);
for i = 1:q
y_i = Y_train(:, i);
% 构建DMatrix
dtrain = xgb.DMatrix(X_train, ‘label’, y_i);
% 训练
bst = xgb.train(params, dtrain, params.num_round);
model.models{i} = bst;
end
model.params = params;
end
🔔 注:上述代码依赖 xgb 对象,需先安装 XGBoost MATLAB 接口(见文末说明)
- xgboost_test.m —— 预测模块
matlab
function Y_pred = xgboost_test(model, X_test)
[q, ~] = size(model.models);
Y_pred = zeros(size(X_test,1), q);
for i = 1:q
dtest = xgb.DMatrix(X_test);
Y_pred(:, i) = xgb.predict(model.models{i}, dtest);
end
end
- calc_error.m —— 误差计算
matlab
function metrics = calc_error(Y_true, Y_pred)
% 支持多输出
metrics.MAE = mean(abs(Y_true - Y_pred), 1);
metrics.RMSE = sqrt(mean((Y_true - Y_pred).^2, 1));
metrics.MAPE = mean(abs((Y_true - Y_pred) ./ (Y_true + eps)), 1) 100;
fprintf(‘MAE: %.4f\n’, mean(metrics.MAE));
fprintf(‘RMSE: %.4f\n’, mean(metrics.RMSE));
fprintf(‘MAPE: %.2f%%\n’, mean(metrics.MAPE));
end
- main_xgboost.m —— 主程序
matlab
clear; clc; close all;
% === 1. 加载数据 ===
data = readtable(‘数据集.xlsx’);
data = table2array(data); % 转为数值矩阵
% === 2. 数据预处理 ===
[X_train, Y_train, X_test, Y_test, ~, scalerY_mean_std] = data_process(data, 0.8);
% === 3. 训练模型 ===
params.max_depth = 8;
params.eta = 0.1;
params.num_round = 200;
params.objective = ‘reg:squarederror’;
model = xgboost_train(X_train, Y_train, params);
% 保存模型
save(‘XGBOOST.mat’, ‘model’);
% === 4. 预测 ===
Y_pred_norm = xgboost_test(model, X_test);
% 反标准化(还原真实值)
Y_test_real = Y_test . std(Y_train) + mean(Y_train);
Y_pred_real = Y_pred_norm . std(Y_train) + mean(Y_train);
% === 5. 误差分析 ===
metrics = calc_error(Y_test_real, Y_pred_real);
% === 6. 可视化(以第一个输出为例)===
figure;
plot(Y_test_real(:,1), ‘b-’, ‘LineWidth’, 1.2); hold on;
plot(Y_pred_real(:,1), ‘r–’, ‘LineWidth’, 1.2);
legend(‘真实值’, ‘预测值’);
title(‘XGBoost 多变量回归预测结果(输出1)’);
xlabel(‘样本索引’); ylabel(‘值’);
grid on;
- 数据集.xlsx 示例格式(前5行示意)
feature1 feature2 … input_p target1 target2 … output_q
10.2 5.1 … 8.7 100.5 20.3 … 15.8
9.8 5.3 … 9.0 102.1 21.0 … 16.2
… … … … … … … …
💡 你可以用自己的数据替换,只要保持“前半列输入,后半列输出”即可。
🔧 如何配置 XGBoost for MATLAB?
由于 MATLAB 不自带 XGBoost,你需要:
方法一(推荐):使用预编译 DLL(适用于 Windows)
- 下载 xgboost.dll、xgboost.h(你已提供)
- 将 xgboost.dll 放入 MATLAB 当前路径
- 使用 loadlibrary 加载(较复杂)
方法二(更简单):使用 MATLAB 内置的 fitrensemble 模拟 XGBoost
如果你无法配置 XGBoost,可用以下替代训练函数(无需外部依赖):
matlab
% 替代 xgboost_train.m(使用 MATLAB 内置提升树)
function model = xgboost_train(X_train, Y_train, ~)
[N, q] = size(Y_train);
model.models = cell(q, 1);
for i = 1:q
model.models{i} = fitrensemble(X_train, Y_train(:,i), …
‘Method’, ‘LSBoost’, …
‘Learners’, templateTree(‘MaxNumSplits’, 10, ‘MinLeafSize’, 5), …
‘NumLearningCycles’, 200);
end
end
% 替代 xgboost_test.m
function Y_pred = xgboost_test(model, X_test)
q = length(model.models);
Y_pred = zeros(size(X_test,1), q);
for i = 1:q
Y_pred(:,i) = predict(model.models{i}, X_test);
end
end
✅ 此方法无需 DLL,完全兼容 MATLAB,性能接近 XGBoost,适合教学和快速验证。
📦 文件清单总结
文件名 作用
main_xgboost.m 主控程序
data_process.m 数据清洗与标准化
xgboost_train.m 模型训练(支持多输出)
xgboost_test.m 预测
calc_error.m 误差指标计算
XGBOOST.mat 保存的模型
数据集.xlsx 示例数据
xgboost.dll 等 XGBoost 接口(可选)
✅ 使用建议
若用于 科研/工程:配置真实 XGBoost(性能更强)
若用于 课程作业/快速验证:使用 fitrensemble 替代方案(免配置)
更多推荐



所有评论(0)