岭回归分析是一种专用于多重共线性数据分析的有偏估计回归方法,是最小二乘回归的改良版本。
过程:
画出岭迹图,选出零参数k
①复习size函数
size():获取矩阵的行数和列数
(1)s=size(A),
当只有一个输出参数时,返回一个行向量,该行向量的第一个元素时矩阵的行数,第二个元素是矩阵的列数。
(2)[r,c]=size(A),
当有两个输出参数时,size函数将矩阵的行数返回到第一个输出变量r,将矩阵的列数返回到第二个输出变量c。
(3)size(A,n)
如果在size函数的输入参数中再添加一项n,并用1或2为n赋值,则 size将返回矩阵的行数或列数。其中r=size(A,1)该语句返回的时矩阵A的行数, c=size(A,2) 该语句返回的时矩阵A的列数。
②给出样本点
xx1=[0.455 0.35 0.53 0.44 0.33 0.425 0.53 0.545 0.475 0.55 0.525 0.43 0.49 0.535 0.47 0.5 0.355 0.44]
xx2=[0.365 0.265 0.42 0.365 0.255 0.3 0.415 0.425 0.37 0.44 0.38 0.35 0.38 0.405 0.355 0.4 0.28 0.34]
xx3=[0.095 0.09 0.135 0.125 0.08 0.095 0.15 0.125 0.125 0.15 0.14 0.11 0.135 0.145 0.1 0.13 0.085 0.1]
x1=xx1.'
x2=xx2.'
x3=xx3.'
x4=[0.514;0.2255;0.677;0.516;0.205;0.3515;0.7775;0.768;0.5095;0.8945;0.6065;0.406;0.5415;0.6845;0.4755;0.6645;0.2905;0.451]
x5=[0.2245;0.0995;0.2565;0.2155;0.0895;0.141;0.237;0.294;0.2165;0.3145;0.194;0.1675;0.2175;0.2725;0.1675;0.258;0.095;0.188]
x6=[0.101;0.0485;0.1415;0.114;0.0395;0.0775;0.1415;0.1495;0.1125;0.151;0.1475;0.081;0.095;0.171;0.0805;0.133;0.0395;0.087]
x7=[0.15;0.07;0.21;0.155;0.055;0.12;0.33;0.26;0.165;0.32;0.21;0.135;0.19;0.205;0.185;0.24;0.115;0.13]
y=[15;7;9;10;7;8;20;16;9;19;14;10;1;10;10;12;7;10]
x=[x1,x2,x3,x4,x5,x6,x7]
(这里错了个知识点,[]方括号中有逗号或者无符号的为一行,有分号的为各个列)
③ridge函数
b=ridge(y,x,k,s);
%b是岭回归模型中的系数向量β=[β0,β1,β2,...,βn],β0是常数项,β1到βn是自变量x1到xn对应的系数
%y是因变量向量
%x是自变量矩阵,x=[x1,...,xn],每个xi都是列向量
%k是岭参数,岭参数不同,岭回归模型不同,要选取合适的岭参数
%s这个位置的参数只能填0或1,或者不填默认为0。0表示输出的系数β该是多少就是多少,1表示输出系数β是标准化后的
④画出岭迹图
%先画出岭迹图,以便选取合适的岭参数
k=0:1e-3:10;%岭参数 1e-3 表示1*10^(-3);
b=ridge(y,x,k);%回归系数
%岭迹图,一般选取开始平稳的“拐点”处的k值
plot(k,b)
xlabel('k')
ylabel('β')
title('岭迹图')
legend('x1','x2','x3','x4','x5','x6','x7')
图像如下:
可近似选出零参数为2(喇叭口处)。
⑤根据方差扩大因子法求零参数
暂且存疑。
但有篇文章利用python第三方库,做出来了。
岭回归和LASSO回归模型(简记Logistic回归分类模型)_lasso回归和logistic回归_积跬步,慕至千里的博客-CSDN博客⑥利用残差平方和来求岭参数
β^是RSS残差平方和
%每个k对应的残差平方和的图,要选取会使残差平方和小的k值
knum=size(b,2);%返回b矩阵的列数
sse=zeros(knum);
y_gu=zeros(18,knum);%zero(x,y)返回x行y列的全为0的矩阵
for j=1:knum
t=0;
for i=1:18
y_gu(i,j)=b(1,j)*x1(i)+b(2,j)*x2(i)+b(3,j)*x3(i)+b(4,j)*x4(i)+b(5,j)*x5(i)+b(6,j)*x6(i)+b(7,j)*x7(i);
t=(y_gu(i,j)-y(i))^2+t;
end
sse(j)=t;
end
plot(k,sse)
xlabel('k')
ylabel('SSE')
title('残差平方和与k的关系图')
这里t即为:
β0为0。
得出图像
可看出k=2时候残差平方和最小。
⑦根据岭参数求拟合函数
%下面均是岭参数k=2情况
b1=ridge(y,x,2,0);%2是岭参数。最后一个位置的参数,是否输出标准化系数,0否1是
y_gu=[[ones(18,1),x(:,:)]*b1];%用岭回归模型求出来的函数估计值(向量)
b1是岭回归参数
为什么要加一列全为1的向量?得出y的结果的系数如下:
11.2317152350659
6.09727532479928
11.9127174239283
9.62296971804759
6.17090651801044
8.62880671936201
16.1156780913486
15.4469422021247
9.41259458592154
16.6098515895808
11.5302004721925
8.16479225956399
8.87073169971142
12.0733941422319
10.9864518842157
13.4428431274547
8.32613853121737
9.35599047522341