1. 程式人生 > >偏最小二乘(pls)迴歸分析 matlab

偏最小二乘(pls)迴歸分析 matlab

偏最小二乘用於查詢兩個矩陣(X和Y)的基本關係,即一個在這兩個空間對協方差結構建模的隱變數方法。偏最小二乘模型將試圖找到X空間的多維方向來解釋Y空間方差最大的多維方向。偏最小二乘迴歸特別適合當預測矩陣比觀測的有更多變數,以及X的值中有多重共線性的時候。通過投影預測變數和觀測變數到一個新空間來尋找一個線性迴歸模型。

一、數學原理

為了實現偏最小二乘迴歸的基本思想,要求t1和u1的協方差最大,即求解下面的優化問題

利用拉格朗日乘數法求出w1和c1滿足

偏最小二乘迴歸的成分、殘差矩陣有許多優良的性質 ,其中之一是成分之間是相互正交的,這在一定程度上消除了多重線性相關性。偏最小二乘迴歸演算法的實質是按照協方差極大化準則,在分解自變數變數資料矩陣 X 的同時,也在分解因變數資料矩陣 Y,並且建立相互對應的解釋隱變數與反應隱變數之間的迴歸關係方程,充分體現了偏最小二乘迴歸的基本思想。

二、建模原理

假定P個自變數{x1,...,xp}和個因變數{y1,…,yq},構成自變數與因變數的資料表X={x1,...,xp}和Y={y1,…,yq}.在X與F中提取出成分t1和u1,在提取t1和u1成分時,滿足t1和u1應儘可能大地攜帶他們各自資料表中的變異資訊,以及t1和u1與的相關程度能夠達到最大.第一個成分t1和u1被提取後,分別實施X對t1以及Y對u1的迴歸.若迴歸方程此時已經達到滿意的精度,則成分確定;否則將利用X被t1以及F被u1解釋後的殘餘資訊進行第二輪的成分t2和u2提取,繼續實施X和Y對t2和u2的迴歸,對上述過程進行迭代,直到精度滿足要求為止.若最終對X共提取了m個成分t1,…,tm,再通過實施F對t1…,tm的迴歸,最後都可轉化為Y對原變數x1,…,xp的迴歸方程,完成了偏最小二乘的迴歸建模.

三、建模過程

step1:資料標準化

step2:求相關係數矩陣

step3:分別提出自變數組與因變數組的成分,在這裡我的標準是當前k個成分解釋自變數的比率達到90%時,取前k個成分

step4:求k個成分對時標準化指標變數與成分變數之間的迴歸方程

step5:求因變數與自變數組之間的迴歸方程,即將step3中的成分帶到step4中所得的迴歸方程,得到標準化指標變數之間的迴歸方程,再將標準化的迴歸變數還原成原始變數。

四、Matlab 偏最小二乘迴歸命令plsregress

呼叫方式:

    [XL,YL] = plsregress(X,Y,ncomp)

    [XL,YL,XS] = plsregress(X,Y,ncomp)

    [XL,YL,XS,YS] = plsregress(X,Y,ncomp)

    [XL,YL,XS,YS,BETA] = PLSREGRESS(X,Y,ncomp,...)

    [XL,YL,XS,YS,BETA,PCTVAR] = plsregress(X,Y,ncomp)

    [XL,YL,XS,YS,BETA,PCTVAR,MSE] = plsregress(X,Y,ncomp)

    [XL,YL,XS,YS,BETA,PCTVAR,MSE] = plsregress(...,param1,val1,param2,val2,...)

    [XL,YL,XS,YS,BETA,PCTVAR,MSE,stats] = PLSREGRESS(X,Y,ncomp,...)

引數解釋:

用ncomp個因子或潛在變數計算Y在X上的迴歸,返回預測和響應載荷。

X是n*p預測變數,行對應觀測項,列對應變數。

Y是n*m響應矩陣。

Xloadings是p*ncomp因子載荷,每行包含定義原始預測變數的線性組合係數

Xscores返回預測變數得分,即PLS因子是X中變數的線性組合,Xscores是一個n*ncomp正交矩陣,行對應觀察值,列對應因子。

因子載荷矩陣是各個原始變數的因子表示式的係數,表達提取的公因子對原始變數的影響程度。

因子得分矩陣表示各項指標變數與提取的公因子之間的關係,在某一公因子上得分高,表明該指標與該公因子之間關係越密切。

簡單說,通過因子載荷矩陣可以得到原始指標變數的線性組合,

如X1=a11*F1+a12*F2+a13*F3,其中X1為指標變數X1,a11、a12、a13分別為與變數X1在同一行的因子載荷,F1、F2、F3分別為提取的公因子;

通過因子得分矩陣可以得到公因子的線性組合,如F1=a11*X1+a21*X2+a31*X3,字母代表的意義同上。、

beta為迴歸模型的係數

PCTVAR是一個兩行的矩陣,第一行為自變數提取成分的貢獻率,第二行為因變數提取成分的貢獻率

MSE是一個兩行的矩陣,第一行的第j個元素表示自變數與它的前j-1個提出成份之間迴歸方程的剩餘標準差;第二行的第j個元素對應著因變數與它的前j-1個提出成份之間迴歸方程的剩餘標準差;

stats返回4個值stats.W是一個pls權重的ρ*ncomp的矩陣,使XS=X0*W,每一列對應特徵向量ρi

stats.T2是XS每一點的T^2統計值

stats.Xresiduals為預測值殘差,X0-XS*XL'

stats.Yresiduals為響應殘差,Y0-XS*YL'

五、案例分析

下表前七列資料為自變數觀測資料,後四列為因變數的觀測資料

clc,clear,format long g
ab0=load('you.txt');
mu=mean(ab0);sig=std(ab0);%求均值和標準差
ab=zscore(ab0);%資料標準化
a=ab(:,1:7);b=ab(:,8:end);
ncomp=2;
[xl,yl,xs,ys,beta,pctvar,mse,stats]=plsregress(a,b,ncomp);
contr=cumsum(pctvar,2);
n=size(a,2);m=size(b,2);%n是自變數個數,m是因變數個數
beta2(1,:)=mu(n+1:end)+mu(1:n)./sig(1:n)*beta(2:end,:).*sig(n+1:end);%原始資料迴歸方程的常數項
beta2(2:n+1,:)=(1./sig(1:n))'*sig(n+1:end).*beta(2:end,:)%計算原始變數x1,...,xn的係數,每一列是一個迴歸方程
format

得到下圖

其中第一行為常數項,後七行為自變數係數

在matlab中,我們可以直接利用zscore(x)這個函式來將資料標準化。
其核心思想是:
z=(x-mean(x))./std(x)

參考資料:

[1].百度百科.偏最小二乘迴歸法

[2].數學建模演算法與應用第二版

[3]. 劉柏森,劉豔.基於偏最小二乘迴歸的城鎮居民消費水平影響因素研究[J].現代營銷(下旬刊),2018(05):227-228.

[4]. 李文強,段振雲,趙文輝.基於偏最小二乘模型的無人機航材需求預測方法[J].系統工程理論與實踐,2018,38(05):1354-1360.

[5]. 孫鳳林. 偏最小二乘迴歸法非線性建模及其遞推演算法的研究[D].華南理工大學,2010.

[6].plsregress引數解釋參照https://blog.csdn.net/qq_35720052/article/details/73998667