什么是偏最小二乘回归?
偏最小二乘回归(英语:Partial least squares regression, PLS回归)是一种统计学方法,与主成分回归有关系,但不是寻找响应变量和自变量之间最大方差超平面,而是通过投影分别将预测变量和观测变量投影到一个新空间,来寻找一个线性回归模型。因为数据X和Y都会投影到新空间,PLS系列的方法都被称为双线性因子模型(bilinear fator models)。当Y是分类数据时称为“偏最小二乘判别分析。
详细一点的介绍可以看看:偏最小二乘法PLS和PLS回归的介绍及其实现方法_Enoch_klb的博客-CSDN博客_pls回归系数1、偏最小二乘法(PLS)介绍偏最小二乘法是一种新型的多元统计数据分析方法,于1983年由S.Wold和C.Albano等人首次提出。偏最小二乘法实现了,在一个算法下,可以同时实现回归建模(多元线性回归)、数据结构简化(主成分分析)以及两组变量之间的相关性分析(典型相关分析)。PCA方法虽解决了自变量共线性的问题,但是并没有考虑自变量主元对于因变量变化的解释作用。所以删除的次要主元有可能包含对...https://blog.csdn.net/Enoch_klb/article/details/84780799?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-1-84780799-blog-89647033.pc_relevant_vip_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-1-84780799-blog-89647033.pc_relevant_vip_default&utm_relevant_index=2
这位博主介绍的很详细了。
Matlab代码
%% I. 清空环境变量
clear all
clc%% II. 导入数据
load spectra;%% III. 随机划分训练集与测试集
temp = randperm(size(NIR, 1));
% temp = 1:60;
%%
% 1. 训练集——50个样本
P_train = NIR(temp(1:50),:);
T_train = octane(temp(1:50),:);
%%
% 2. 测试集——10个样本
P_test = NIR(temp(51:end),:);
T_test = octane(temp(51:end),:);%% IV. PLS回归模型
%%
% 1. 创建模型
k = 2;
[Xloadings,Yloadings,Xscores,Yscores,betaPLS,PLSPctVar,MSE,stats] = plsregress(P_train,T_train,k);%%
% 2. 主成分贡献率分析
figure
percent_explained = 100 * PLSPctVar(2,:) / sum(PLSPctVar(2,:));
pareto(percent_explained)
xlabel('主成分')
ylabel('贡献率(%)')
title('主成分贡献率')%%
% 3. 预测拟合
N = size(P_test,1);
T_sim = [ones(N,1) P_test] * betaPLS;%% V. 结果分析与绘图
%%
% 1. 相对误差error
error = abs(T_sim - T_test) ./ T_test;
%%
% 2. 决定系数R^2
R2 = (N * sum(T_sim .* T_test) - sum(T_sim) * sum(T_test))^2 / ((N * sum((T_sim).^2) - (sum(T_sim))^2) * (N * sum((T_test).^2) - (sum(T_test))^2));
%%
% 3. 结果对比
result = [T_test T_sim error]%%
% 4. 绘图
figure
plot(1:N,T_test,'b:*',1:N,T_sim,'r-o')
legend('真实值','预测值','location','best')
xlabel('预测样本')
ylabel('辛烷值')
string = {'测试集辛烷值含量预测结果对比';['R^2=' num2str(R2)]};
title(string)