题目给出数据如图:
前7列为因变量,最后一列为函数值
前7列为因变量,最后一列为函数值。
对其做岭回归分析。
需要用到matlab自带的函数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这个位置的参数只能填01,或者不填默认为00表示输出的系数β该是多少就是多少,1表示输出系数β是标准化后的

另外,k=0时,为最小二乘法。
源代码如下:

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];
%先画出岭迹图,以便选取合适的岭参数
k=0:1e-3:10;%岭参数
b=ridge(y,x,k);%回归系数

%岭迹图,一般选取开始平稳的“拐点”处的k值
plot(k,b)
xlabel('k')
ylabel('β')
title('岭迹')
legend('x1','x2','x3','x4','x5','x6','x7')



%每个k对应的残差平方和的图,要选取会使残差平方和小的k值
knum=size(b,2);
sse=zeros(knum);
y_gu=zeros(18,knum);
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的关系图')

%下面均是岭参数k=2情况
b1=ridge(y,x,2,0);%2是岭参数。最后一个位置的参数,是否输出标准化系数,01是
y_gu=[[ones(18,1),x(,:)]*b]1;%用岭回归模型求出来的函数估计值(向量)

岭迹图如下:
在这里插入图片描述
可以看出曲线都是趋于平稳的,适合岭回归,另外k=2时,开始平稳,可以考虑选取该值,不过还需进一步验证。
残差平方和的图如下:
在这里插入图片描述
可以看出k=2时残差平方和是小的,选取该值合理。
β是x对y的影响程度的描述,可以看出最后β都趋近于0,那么说明可以用岭回归来降维,来剔除不重要的变量。只要βi小于一个你自己设置的阈值,就把βi视作0,相应地,模型就要剔除自变量xi,这从某种程度上简化了模型。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐