【限制出售】 基于MATLAB的xgboost的敏感性分析/特征值排序计算(针对多输入单输出回归预测模型)

作品简介

仅针对购买过XGB回归预测的人进行出售




因matlab的xgboost训练模型不含敏感性分析算法,本文通过使用single算法,即单特征因素对输出影响进行分析,得出不同特征变量对应的权重。


## 一、数据部分代码


%% 导入数据
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);

## 二、敏感性分析部分代码

%% 敏感性分析

serdata.ft = p_test';%测试集输入
userdata.target = t_test';%测试集输出
nSel = size(p_test,1);%选择的特征数量 ,可以小于等于变量特征数
mtds = {@regression_ftSel_single};% single方法
nMtd = length(mtds);%方法数量
for iMtd = 1:nMtd
		[ftRank,ftScore,errs] = mtds{iMtd}(p_train',t_train',p_test,t_test);	%仅在训练集上选择特征
 
end
A=[[1:nSel]',errs'];
B2=A;

[W] = B2(:,2)';
for i=1:size(W,2)
  WW(1,i)=(1./W(1,i))./sum(1./W);
end

figure()
bar(WW)
xlabel('特征变量')
%set(gca,'XTickLabel',{'x1','x2','x3'})
xlabel("影响因素");ylabel("敏感度");
title('敏感性分析')

## 三、运行效果




训练集数据的R2为:0.99952

测试集数据的R2为:0.90306

训练集数据的MAE为:0.061008

测试集数据的MAE为:1.9449

训练集数据的MBE为:0.001729

测试集数据的MBE为:-0.54221


创作时间:2024-04-12 22:47:03