机器学习--线性回归 最小二乘法

本文详细介绍了最小二乘法的概念及其在机器学习中的应用,通过具体实例展示了如何利用最小二乘法对历史数据进行拟合,并求解最优参数。文中还涉及到线性回归、损失函数、导数求解等核心知识点,为后续更高级算法的理解打下了坚实的基础。


机器学习第1天
欢迎转载,请标明出处(http://blog.csdn.net/tonyshengtan),尊重劳动,尊重知识,欢迎讨论。
#开篇废话
话说在高中数学统计的部分就有学过最小二乘法,现在想想,当时没有严格的推倒和实用背景,单纯的给了公式然后做应用题,不过也印证了乔布斯的一句话,不管你现在在做什么,你都无法预料到这对你以后是否有影响,你只能看到过去,无法看到未来。
#最小二乘法(Least squares)
为什么叫最小二乘法,首先最小明确的告诉你,俺们求出来的是全局的最值,不是极值,就是最小的一个位置,二乘(square)是平方的意思,Ok,也就是说最小二乘法的理论是找到最小的平方值,什么的最小平方值?慢慢看下面。
参考书《机器学习基础教程》中的例子,以历届奥运会男子100米的夺冠时间为数据:

No.Yeartime
1189612.0
2190011.0
3190411.0
4190810.8
5191210.8
6192010.8
7192410.6
8192810.8
9193210.3
10193610.3
11194810.3
12195210.4
13195610.5
14196010.2
15196410.0
1619689.95
17197210.14
18197610.06
19198010.25
2019849.99
2119889.92
2219929.96
2319969.84
2420009.87
2520049.85
2620089.69
2720129.63

注释:中间有三年数据缺失,原因是第一和第二次世界大战(闲的没事回家搞科研造福人类多好,打毛的仗)。
使用matlab显示下数据:

![这里写图片描述](https://img-blog.csdn.net/20150428093045580)

生成上图代码:

data=[1896	12.0;1900	11.0;1904	11.0;1908	10.8;1912	10.8;1920	10.8;1924	10.6;1928	10.8;1932	10.3;1936	10.3;1948	10.3;1952	10.4;1956	10.5;1960	10.2;1964	10.0;1968	9.95;1972	10.14;1976	10.06;1980	10.25;1984	9.99;1988	9.92;1992	9.96;1996	9.84;2000	9.87;2004	9.85;2008	9.69;2012	9.63];
x=data(:,1);
t=data(:,2);
scatter(x,t,'k');

其中第三个参数可以由下表中查出:

![这里写图片描述](https://img-blog.csdn.net/20150428093610341)

很明显的下降趋势,不太明显的线性关系,不过我们还是用线性来拟合这组数据,看看会有什么效果。
设直线为:

t = w 1 x + w 0 t=w_1x+w_0 t=w1x+w0

来解释下这个模型,我们的目的是让整条直线尽可能的和途中点数据相接近,而并不是要让一条直线穿过尽可能多的点,换句话说我们要追求一个全局的最优。
如何来衡量这个直线和各点之间的接近程度呢?这里给出一个平方损失函数,请注意,这并不是唯一的办法,不过是一种简单的方法,比如绝对值也能完成此类任务,但绝对值计算过于复杂,四次六次八次函数也能完成,很明显计算量也过大,所以我们的损失函数定义为:

$\ell_n=(t_n-f(x_n;w_0,w_1))^2$

其中:

$f(x_n;w_0,w_1)=w_0+w_1x$

这样就给出了“二乘的部分”,求最小二乘的目的是得出全局最优解参数 w 1 , w 0 w_1,w_0 w1,w0

$\ell=\frac{1}{N}\sum_{n=1}^{N}(t_n-f(x_n;w_0,w_1))^2 \\\ =\frac{1}{N}\sum_{n=1}^{N}(t_n-w_0-w_1x)^2 \\\ =\frac{1}{N}\sum_{n=1}^{N}(w_1^2x_n^2+2w_1x_n(w_0-t_n)+w_0^2-2w_0t_n+t_n^2)$

求最小值,一般的方法是求一阶导数,对于上式,我们认为自变量是 w 1 , w 0 w_1,w_0 w1,w0 x n , t n x_n,t_n xn,tn是参数(已知常数),所以一阶导数要使用偏导数。
这样,求导前简化掉没用项:
当对 w 1 w_1 w1求导数时:

$\frac{1}{N}\sum_{n=1}^{N}(w_1^2x_n^2+2w_1x_nw_0-2w_1x_nt_n)$

整理求导后得到:

$\frac{\partial\ell}{\partial w_1}=2w_1\frac{1}{N}(\sum_{n=1}^{N}x_n^2)+\frac{2}{N}(\sum_{n=1}^{N}x_n(w_0-t_n))$

同理对 w 0 w_0 w0求偏导:

$\frac{\partial\ell}{\partial w_0}=2w_0+2w_1\frac{1}{N}(\sum_{n=1}^{N}x_n)-\frac{2}{N}(\sum_{n=1}^{N}t_n)$

根据一阶导数为0时有可能为最值点(有可能是极值或者驻点,进一步判断需要求二阶偏导数得出,但对于平方形函数,一阶导数为零可以确定为最值)
这样就能求出:

$\hat{w_0}=\bar{t}-w_1\bar{x}$
$\hat{w_1}=\frac{\bar{xt}-\bar{x}\bar{t}}{\bar{x^2}-(\bar{x}^2)}$

用一下代码对最上面图进行最小二乘拟合得到:

![这里写图片描述](https://img-blog.csdn.net/20150428103504291)

Matlab Code:

data=[1896	12.0;1900	11.0;1904	11.0;1908	10.8;1912	10.8;1920	10.8;1924	10.6;1928	10.8;1932	10.3;1936	10.3;1948	10.3;1952	10.4;1956	10.5;1960	10.2;1964	10.0;1968	9.95;1972	10.14;1976	10.06;1980	10.25;1984	9.99;1988	9.92;1992	9.96;1996	9.84;2000	9.87;2004	9.85;2008	9.69;2012	9.63];

[m,n]=size(data);%m行,n列
x=data(:,1);
t=data(:,2);
scatter(x,t,'k');
xt=0;
x_=mean(x);
t_=mean(t);
x_2=0;
for i=1:m
    xt=xt+x(i)*t(i);
    x_2=x_2+x(i)^2;
end
xt_mean=xt/m;
x_2_mean=x_2/m;
w1=(xt_mean-x_*t_)/((x_2_mean)-x_^2);
w0=t_-w1*x_;


x=data(:,1);
t=data(:,2);
scatter(x,t,'k');
[m,n]=size(data);%m行,n列
xt=0;
x_=mean(x);
t_=mean(t);
x_2=0;
for i=1:m
    xt=xt+x(i)*t(i);
    x_2=x_2+x(i)^2;
end
xt_mean=xt/m;
x_2_mean=x_2/m;
w1=(xt_mean-x_*t_)/((x_2_mean)-x_^2);
w0=t_-w1*x_;
%%使用矩阵解决
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for i=1:m
    X(i,1)=1;
    X(i,2)=x(i);
end

w=(X'*X)^(-1)*X'*t;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
refline(w1,w0);%w1斜率,w0截距
refline(w1,w0);%w1斜率,w0截距

以上针对二维数据,对于超过二维的数据的线性回归我们使用矩阵来做等效处理。
对于超过二维的数据,损失函数定义如下:

$\ell=\frac{1}{N}(\vec t-X\vec w)^T(\vec t-X\vec w)$

此处推导过程,与上二维数据推导过程类似,但使用矩阵为工具,故省略:

$\hat {\vec w}=(X^TX)^{-1}X^T \vec t$

#总结
至此,最小二乘法的基本过程已经介绍完了,基础算法可能数学推导过多,但对后面的高级算法理解还是很有用的。
待续。。。。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值