MATLAB 偏最小二乘回歸演算法

2021-08-29 07:38:22 字數 3250 閱讀 1352

設有q個因變數和p個自變數。為了研究因變數和自變數的統計關係,觀測n個樣本點,構成了自變數與因變數的資料表x=

(1)兩個成分盡可能多的攜帶他們各自資料表的變異資訊。

(2)兩個成分的相關程度達到最大。

也就是說,他們能夠盡可能好地代表各自的資料表,同時自變數成分

在第乙個成分被成功提取後,分別實施x對

·該m檔案plsfactor.m是專門提取主函式檔案。

%用於提取主函式檔案

function [omega,t,pp,***,r,yyy]=plsfactor(x0,y0)

xx=x0'*y0*y0'*x0;

[v,d]=eig(xx);

lamda=max(d);

[maxlamda,i]=max(lamda);           %最大特徵值對應的特徵向量

omega=v(:,i);

%第一主元

t=x0*omega;

pp=x0'*t/(t'*t);

***=x0-t*pp';

r=y0'*t/(t'*t);

yyy=y0-t*r';

該m檔案pls.m是對自變數x和因變數y進行部分最小二乘回歸(偏最小二乘回歸)的函式檔案

function [beta,vip]=pls(x,y)%

[n,p]=size(x);%

[n,q]=size(y);%

meanx=mean(x);%                           %均值

varx=var(x);         %                          %方差

meany=mean(y); %                      

vary=var(y);          %

%%%資料標準化過程

for i=1:p               %

for j=1:n           %

x0(j,i)=(x(j,i)-meanx(i))/((varx(i))^0.5);%

endendfor i=1:q

for j=1:n

y0(j,i)=(y(j,i)-meany(i))/((vary(i))^0.5);%

endend[omega(:,1),t(:,1),pp(:,1),xx(:,:,1),rr(:,1),yy(:,:,1)]=plsfactor(x0,y0);%

[omega(:,2),t(:,2),pp(:,2),xx(:,:,2),rr(:,2),yy(:,:,2)]=plsfactor(xx(:,:,1),yy(:,:,1));%

presshj=0;%

tt0=ones(n-1,2);%

for i=1:n

yy0(1:(i-1),:)=y0(1:(i-1),:);%

yy0(i:(n-1),:)=y0((i+1):n,:);%

tt0(1:(i-1),:)=t(1:(i-1),:);%

tt0(i:(n-1),:)=t((i+1):n,:);%

exppress(i,:)=(y0(i,:)-t(i,:)*inv((tt0'*tt0))*tt0'*yy0);%

for m=1:q

presshj=presshj+exppress(i,m)^2;%

endendsum1=sum(presshj);%

pressh=sum(sum1);%

for m=1:q

for i=1:n

sshj(i,m)=yy(i,m,1)^2;

endendsum2=sum(sshj);

ssh=sum(sum2);

q=1-(pressh/ssh);

k=3;

%%%迴圈,提取主元

while q>0.0975

[omega(:,k),t(:,k),pp(:,k),xx(:,:,k),rr(:,k),yy(:,:,k)]=plsfactor(xx(:,:,k-1),yy(:,:,k-1));

presshj=0;

tt00=ones(n-1,k);

for i=1:n

yy0(1:(i-1),:)=y0(1:(i-1),:);

yy0(i:(n-1),:)=y0((i+1):n,:);

tt00(1:(i-1),:)=t(1:(i-1),:);

tt00(i:(n-1),:)=t((i+1):n,:);

exppress(i,:)=(y0(i,:)-t(i,:)*((tt00'*tt00)^(-1))*tt00'*yy0);

for m=1:q

presshj=presshj+exppress(i,m)^2;

endend

for m=1:q

for i=1:n

sshj(i,m)=yy(i,m,k-1)^2;

endend

sum2=sum(sshj);

ssh=sum(sum2);

q=1-(pressh/ssh);

if q>0.0975

k=k+1;

endendh=k-1;  %%%提取主元的個數

omegaxing=ones(p,h,q);

%%%還原回歸係數

for m=1:q

omegaxing(:,1,m)=rr(m,1)*omega(:,1);

for i=2:(h)

for j=1:(i-1)

omegaxingi=(eye(p)-omega(:,j)*pp(:,j)');

omegaxingii=eye(p);

omegaxingii=omegaxingii*omegaxingi;

endomegaxing(:,i,m)=rr(m,i)*omegaxingii*omega(:,i);

endbeta(:,m)=sum(omegaxing(:,:,m),2);

endfor i=1:h

for j=1:q

relation(i,j)=sum(prod(corrcoef(t(:,i),y(:,j))))/2;

endend%%%%%%%%

rd=relation.*relation;

rdyt=sum(rd,2)/q;

rdtttt=sum(rdyt);

omega22=omega.*omega;

vip=((p/rdtttt)*(omega22*rdyt)).^0.5;    %%%計算vip係數

偏最小二乘回歸(基於MATLAB)

clc clear all 匯入資料 load data.mat s data data 1 27,29 n 27 n 是自變數的個數 m 1 m 是因變數的個數 讀取訓練資料 train num 1600 訓練樣本數 train data s data 1 train num,mu mean tr...

python 偏最小二乘回歸實現

import pandas as pd import numpy as np from sklearn.cross decomposition import plsregression from sklearn.model selection import gridsearchcv from skl...

最小二乘 加權最小二乘 matlab實現

最小二乘 最小二乘法 又稱最小平方法 是一種數學優化技術。它通過最小化誤差的平方和尋找資料的最佳函式匹配。利用最小二乘法可以簡便地求得未知的資料,並使得這些求得的資料與實際資料之間誤差的平方和為最小 最小二乘法還可用於曲線擬合,其他一些優化問題也可通過最小化能量或最大化熵用最小二乘法來表達。加權最小...