线性回归
给定数据集D={(**x1**,y1),(**x2**,y2).....,(**xm**,ym)},(有m个样本)其中**xi**=(xi1;xi2;xi3.....;xid),(每个样本有d个特称或者属性)线性回归试图学得一个线性模型尽可能准确地预测实值输出标记。
我们考虑一种最简单的情形:输入属性的数目只有一个,即预测的线性模型可以表示为f(xi)=w*xi+b
确定w和b就是我们要做的事情,显然,关键在于如何衡量f(x)和y之间的差距,而均方误差是回归任务中最常用的性能度量,因此我们可以试图让均方误差最小化,即
基于均方误差最小化来进行模型求解的方法称为“最下二乘法”,在回归方程中最小二乘法就是试图找到一条直线,使所有样本到直线的欧式距离之和最小。
求解w,b,将上式分别对w和b求偏导数,得到
matlab实现代码:
num=100;
a=1;
b=3;%生成y=ax+b的100个随机数字
Xbuf=zeros(num,1);
Ybuf=zeros(num,1);
for i=1:num
Xbuf(i,1)=10*rand;
Ybuf(i,1)=a*Xbuf(i,1)+b +rand*2;
end
plot(Xbuf,Ybuf,'.r');
sum=0;
for i=1:100
sum=sum+Xbuf(i,1);
end
xave=sum/100;
divisor=0;
for i=1:100
divisor=divisor+Ybuf(i,1)*(Xbuf(i,1)-xave);
end
mod=0;
Xsquare=0;
for i=1:100
Xsquare=Xsquare+Xbuf(i,1)*Xbuf(i,1);
end
w=divisor/(Xsquare-sum*sum/100);%y=wx+b的w计算
b_sum=0;
for i=1:100
b_sum= b_sum+Ybuf(i,1)-w*Xbuf(i,1);
end
b=b_sum/100; %y=wx+b的b的计算
x=0:0.1:10;
y=w*x+b;
hold on;
plot(x,y,'-');
hold off;
结果展示: