基于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 行为) 进行演示。

✅ 完整代码包结构(可直接运行)

  1. 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

  1. 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 接口(见文末说明)

  1. 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

  1. 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

  1. 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;

  1. 数据集.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)

  1. 下载 xgboost.dll、xgboost.h(你已提供)
  2. 将 xgboost.dll 放入 MATLAB 当前路径
  3. 使用 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 替代方案(免配置)

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐