岭回归(英文名:ridge regression, Tikhonov regularization)是一种专用于共线性数据分析的有偏估计回归方法,实质上是一种改良的最小二乘估计法,通过放弃最小二乘法的无偏性,以损失部分信息、降低精度为代价获得回归系数更为符合实际、更可靠的回归方法,对病态数据的拟合要强于最小二乘法。
岭回归相对于用最小二乘法做的线性回归,就是把经验风险转化为结构风险,也就是正则化(吴雄华说的,不懂)
function w=ridge(data,k)
data=zscore(data);
x=data(:,1:13);%自变量
y=data(:,end);
x=[ones(size(x,1),1),x];
w0=0.1*[1 1 1 1 1 1 1 1 1 1 1 1 1 1]';
f=@(w) (y-x*w)'*(y-x*w)+k*w'*w;%损失函数 相对于最小二乘法多了个k*w'*w
deta=@(w) 2*x'*(x*w-y)+2*w*k;%梯度 相对于最小二乘法多了个2*w*k
ep=0.00001;
%下面使用梯度下降
lr=0.005;
f0=f(w0);
g0=deta(w0);
w1=w0-lr*g0;
f1=f(w1);
t=1;
while(abs(f1-f0)>ep)
f0=f1;
w0=w1;
g=deta(w0);
w1=w0-lr*g;
f1=f(w1);
t=t+1;
end
w=w1;
clear all
clc
data=xlsread("C:\Users\19680\Desktop\波士顿房价数据集.xlsx");
k=0:1:10000;
for n=1:length(k)
w=ridge(data,n);
j(n,:)=w;
end
plot(k,j)
title("此图为cxs所有")
a=[0.00632 18 2.31 0 0.538 6.575 65.2 4.09 1 296 15.3 396.9 4.98];
a=zscore(a);
c=w.*a;
sum(c(:,end))
%reglm
用自适应梯度下降法
function w=ridge(data,k)
data=zscore(data);
x=data(:,1:13);%自变量
y=data(:,end);
x=[ones(size(x,1),1),x];
w0=0.1*[1 1 1 1 1 1 1 1 1 1 1 1 1 1]';
f=@(w) (y-x*w)'*(y-x*w)+k*w'*w;%损失函数
deta=@(w) 2*x'*(x*w-y)+2*w*k;%梯度
ep=0.001;
tiny=1e-10;
%下面使用梯度下降
lr=1;
f0=f(w0);
g0=deta(w0);
s=g0'*g0;%s储存梯度的平方的累加和
w1=w0-lr/sqrt(s+tiny)*g0;
f1=f(w1);
t=1;
while(abs(f1-f0)>ep)
s=s+g0'*g0;
g1=deta(w0);
w1=w0-lr*g1/sqrt(s+tiny);
f1=f(w1);
t=t+1;
f0=f1;
w0=w1;
g0=g1;
end
w=w1;