线性回归
1
线性模型是一个非常复杂的模型,它的基本数学模型表达式如下:
其中x是已知的,w是一个加权数。线性回归只是线性模型中的一小块,而且不难。
给定数据集D={(x1,y1),(x2,y2)……(xi,yi)}目标是最终通过一些列的方法得到一个函数
y=wx+b
使得在出现新的x时,带入函数后使得y的误差最小。我们采用均方误差来度量拟合误差。即
(w*,b*)=minΣ(f(xi)-yi)² (1)
上式可化为
(w*,b*)=minΣ(yi-w*xi-b)² (2)
对于(2)式,由于是w和b的二次函数,由二元函数求最小值的知识,对两边同时求偏导,并令他们同时等于零,解出来的w和b一定能使误差最小。
由上述方法求导并化简后可得
解释一下,由于在编辑器里不太好搞公式,所以我就在其它地方搞好了再截图。公式中假设了有m个数据。
这就是我们经常听见的最小二乘法了。当然,拟合的好坏不仅仅之和算法有关,和数据的优良也有关系。(需要注意的是,这里只有一个输入x当有很多输入时,方法也是一样的,但是要复杂得多,我暂时还没有掌握其精髓,所以就先不写了。)
虽然现在matlab和众多的数学软件都有现成的函数可以用,但是为了体验这个过程,我还是自己编了一段代码,数据是在网上找的。其结果如下(代码在附件中);
附件:
%y=wx+b
close all
clear all
x=[75 90 148 183 242 263 278 318 256 200 140 80];
y=[2 5 6 7 22 25 28 30 22 18 10 2];
subplot(1,2,1)
plot(x,y,'o')
title('拟合前')
X=mean(x);%求x的平均数
A=0;B=0;C=0;D=0;m=length(x);%标志位
for i=1:m
A=A+x(i)^2;
end
for i=1:m
B=B+x(i);
end
for i=1:m
C=C+y(i)*(x(i)-X);
end
w=C./(A-B.^2./m);
for i=1:m
D=D+y(i)-w*x(i);
end
b=D/m;
t=0:1:320;
s=w.*t+b;
subplot(1,2,2)
plot(t,s,'r',x,y,'o')
title('拟合后')
领取专属 10元无门槛券
私享最新 技术干货