数学建模的偏最小二乘回归(软件应用)

实验名称:偏最小二乘回归

实验目的:

1.直观了解偏最小二乘回归基本原理与适用场景.

2.掌握用数学软件求解最小二乘回归问题.

实验内容:

采用兰纳胡德(Linnerud)给出的关于体能训练的数据进行偏最小二乘回归建模。

题目:

为测试体能训练成绩,现抽取某健身俱乐部的20位中年男子作为检测样本。被测变量分为两组。第一组是身体特征指标X,包括:体重、脉搏、腰围。第二组变量是训练结果指标Y,包括:单杠、跳高、弯曲。

No

体重(x1)

脉搏(x2)

腰围(x3)

单杠(y1)

跳高(y2)

弯曲(y3)

1

191

50

36

5

60

169

2

189

52

37

2

60

110

3

193

58

38

12

101

101

4

162

62

35

12

37

105

5

189

46

35

13

58

155

6

182

56

36

4

42

101

7

211

56

38

9

38

101

8

167

60

34

6

40

125

9

176

74

31

15

40

200

10

154

56

33

17

250

251

11

169

50

34

17

38

120

12

169

52

33

13

115

210

13

156

64

34

14

105

215

14

247

50

46

1

50

50

15

193

46

36

6

31

70

16

202

62

37

12

120

210

17

176

54

37

4

25

60

18

157

52

32

11

80

230

19

156

54

33

15

73

225

20

139

68

33

2

43

110

利用如下的 MATLAB 程序:

clc,clear

load pz.txt %原始数据存放在纯文本文件pz.txt 中

mu=mean(pz);sig=std(pz); %求均值和标准差

rr=corrcoef(pz); %求相关系数矩阵

data=zscore(pz); %数据标准化

n=3;m=3; %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);

end

press(i)=sum(press_i);

if i>1

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

else

Q_h2(1)=1;

end

if Q_h2(i)<0.0975

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

r=i;

break

end

end

beta_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); %计算原始数据的回归方程的常数项

end

for i=1:m

xish(:,i)=xishu(:,i)./sig_x'*sig_y(i); %计算原始数据的回归方程的系数,每一列是一个回归方程

end

sol=[ch0;xish] %显示回归方程的系数,每一列是一个方程,每一列的第一个数是常数项

save mydata x0 y0 num xishu ch0 xish

运行结果:

回归模型为:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值