matlab偏最小二乘法

2021-07-25 08:32:22 字數 2941 閱讀 1674

偏最小二乘是建立表到表的線性擬合關係,然後**的方法(處理高維資料),比如在光譜分析中,x是某物質的光譜樣本構成的訓練集,y是對應的成分資料,x是要**成分的光譜資料

function [y5,s] = pls2(x,y,x)

%[y5,s] = pls2(x,y,x)【參考自司守奎教材 偏最小而成回歸章節**】

% x、y 為模型生成樣本,x為需要**物件,y5是**結果

% s.sol為模型的矩陣

s.name = char();

pz = [x,y];%通過這裡注意資料組織形式,一行為乙個資料

mu = mean(pz);sig = std(pz);

mu=mean(pz);sig=std(pz); %求均值和標準差

rr=corrcoef(pz); %求相關係數矩陣

data=zscore(pz); %資料標準化

n=size(x,2);m=size(y,2); %n 是自變數的個數,m 是因變數的個數

x0=pz(:,1:n);y0=pz(:,n+1:end);

e0=data(:,1:n);f0=data(:,n+1:end);

num=size(e0,1);%求樣本點的個數

chg=eye(n); %w 到 w*變換矩陣的初始化

for i=1:n

%以下計算 w,w*和 t 的得分向量,

matrix=e0'*f0*f0'*e0;

[vec,val]=eig(matrix); %求特徵值和特徵向量

val=diag(val); %提出對角線元素

[val,ind]=sort(val,'descend');

w(:,i)=vec(:,ind(1)); %提出最大特徵值對應的特徵向量

w_star(:,i)=chg*w(:,i); %計算 w*的取值

t(:,i)=e0*w(:,i); %計算成分 ti 的得分

alpha=e0'*t(:,i)/(t(:,i)'*t(:,i)); %計算 alpha_i

chg=chg*(eye(n)-w(:,i)*alpha'); %計算 w 到 w*的變換矩陣

e=e0-t(:,i)*alpha'; %計算殘差矩陣

e0=e;

%以下計算 ss(i)的值

beta=[t(:,1:i),ones(num,1)]\f0; %求回歸方程的係數

beta(end,:)=; %刪除回歸分析的常數項

cancha=f0-t(:,1:i)*beta; %求殘差矩陣

ss(i)=sum(sum(cancha.^2)); %求誤差平方和

%以下計算 press(i)

for j=1:num

t1=t(:,1:i);f1=f0;

she_t=t1(j,:);she_f=f1(j,:); %把捨去的第 j 個樣本點儲存起來

t1(j,:)=;f1(j,:)=; %刪除第 j 個觀測值

beta1=[t1,ones(num-1,1)]\f1; %求回歸分析的係數

beta1(end,:)=; %刪除回歸分析的常數項

cancha=she_f-she_t*beta1; %求殘差向量

press_i(j)=sum(cancha.^2);

endpress(i)=sum(press_i);

if i>1

q_h2(i)=1-press(i)/ss(i-1);

else

q_h2(1)=1;

endif q_h2(i)<0.0975

fprintf('提出的成分個數 r=%d',i);

r=i;

break

endendbeta_z=[t(:,1:r),ones(num,1)]\f0; %求 y 關於 t 的回歸係數

beta_z(end,:)=; %刪除常數項

xishu=w_star(:,1:r)*beta_z; %求y關於x的回歸係數,且是針對標準資料的回歸係數,每一列是乙個回歸方程

mu_x=mu(1:n);mu_y=mu(n+1:end);

sig_x=sig(1:n);sig_y=sig(n+1:end);

for i=1:m

ch0(i)=mu_y(i)-mu_x./sig_x*sig_y(i)*xishu(:,i); %計算原始資料的回歸方程的常數項

endfor i=1:m

xish(:,i)=xishu(:,i)./sig_x'*sig_y(i); %計算原始資料的回歸方程的係數,每一列是乙個回歸方程

endsol=[ch0;xish]; %顯示回歸方程的係數,每一列是乙個方程,每一列的第乙個數是常數項

%% 用模型進行**

y5= x*xish;

for i=1:size(y5,2)

y5(:,i)= y5(:,i)+ch0(i);

end%% 求模型的誤差以及擬合優度

yy=x*xish;y = y;

for i=1:size(yy,2)

yy(:,i)= yy(:,i)+ch0(i);

end e2 = abs((yy-y)./y);%求模型的相對誤差

s.relativeerror = e2;

for i=1:size(yy,2)

c1(i) = sqrt( sum( (yy(:,i)-y(:,i)).^2 ) ./ size(yy,1) );%求模型的均方根誤差

c2(i) = sqrt( sum((yy(:,i)-mean(y(:,i))).^2)./size(yy,1) );%標準誤差

[~,~,~,~,temp] = regress(yy(:,i),[ones(size(y,1),1),y(:,i)]);

c3(i) = temp(1);%擬合優度

ends.rootmse = c1;s.standarderror = c2;s.r2 = c3;

end

偏最小二乘法

偏最小二乘回歸是一種新型的多元統計資料分析方法,它與1983年由伍德和阿巴諾等人首次提出。近十年來,它在理論 方法和應用方面都得到了迅速的發展。密西根大學的弗耐爾教授稱偏最小二乘回歸為第二代回歸分析方法。偏最小二乘回歸方法在統計應用中的重要性主要的有以下幾個方面 1 偏最小二乘回歸是一種多因變數對多...

偏最小二乘法

偏最小二乘回歸是一種新型的多元統計資料分析方法,它與1983年由伍德和阿巴諾等人首次提出。近十年來,它在理論 方法和應用方面都得到了迅速的發展。密西根大學的弗耐爾教授稱偏最小二乘回歸為第二代回歸分析方法。偏最小二乘回歸方法在統計應用中的重要性主要的有以下幾個方面 1 偏最小二乘回歸是一種多因變數對多...

偏最小二乘法

偏最小二乘回歸是一種新型的多元統計資料分析方法,它與1983年由伍德和阿巴諾等人首次提出。近十年來,它在理論 方法和應用方面都得到了迅速的發展。密西根大學的弗耐爾教授稱偏最小二乘回歸為第二代回歸分析方法。偏最小二乘回歸方法在統計應用中的重要性主要的有以下幾個方面 1 偏最小二乘回歸是一種多因變數對多...