机器学习-最小二乘

机器学习-最小二乘

转载声明

本文大量内容系转载自以下文章,有删改,并参考其他文档资料加入了一些内容:

摘要

大家可以随意搜索一下,相关的文章很多。长篇大论的不少,刚入门的朋友一看到那些公式可能就看不下去了。比如下面的解释:
最小二乘
毫无疑问,这样的解释是专业的,严谨的。事实上,这是深度学习圣经里的解释。我并没有诋毁大师的意思,只是觉得用一个具体的例子来说明,可能会让读者更加容易理解。

0x01 线性最小二乘法

1.1 例子

小明是跑运输的,跑1公里需要6块,跑2公里需要5块(那段时间刚好油价跌了),跑3公里需要7块,跑4公里需要10块,请问跑5公里需要多少块?如果我们有初中数学基础,应该会自然而然地想到用线性方程组来做:
方程1
这里假定x是公里数,y是运输成本(β1和β2是要求的系数)。我们把上面的一组数据代入得到这么几个方程:
方程2
如果存在这样的β1和β2,让所有的数据(x,y)=(1,6),(2,5),(3,7),(4,10)都能满足的话,那么解答就很简单了,β1+5β2就是5公里的成本,对吧。

但遗憾的是,这样的β1和β2是不存在的,上面的方程组很容易,你可以把前面两个解出来得到一组β1和β2,后面两个也解出来同样得到一组β1和β2。这两组β1和β2是不一样的。

形象地说,就是你找不到一条直线,穿过所有的点,因为他们不在一条直线上。如下图:
图1
可是现实生活中,我们就希望能找到一条直线,虽然不能满足所有条件,但能近似地表示这个趋势,或者说,能近似地知道5公里的运输成本,这也是有意义的。

1.2 最小二乘

其实最小二乘法也是这样,要尽全力让这条直线最接近这些点,那么问题来了,怎么才叫做最接近呢?直觉告诉我们,这条直线在所有数据点中间穿过,让这些点到这条直线的误差之和越小越好。这里我们用方差来算更客观。也就是说,把每个点到直线的误差平方加起来:
图2

如果上面的四个方程都能满足,那么S的值显然为0,这是最完美的,但如果做不到完美,我们就让这个S越小越好)

接下来的问题就是,如何让这个S变得最小。这里有一个概念,就是求偏导数。这里我想提一下,在培训的过程中,我发现机器学习的数学基础课程当中,微积分是大家印象最深刻的,而且也最容易理解:比如导数就是求变化率,而偏导数则是当变量超过一个的时候,对其中一个变量求变化率。如果这个概念也忘了,可以参考我在深度学习回答里那个王小二卖猪的例子。这里就不细讲了:深度学习如何入门?

要让S取得最小值(或最大值,但显然这个函数没有最大值,自己琢磨一下),那么S对于β1和β2分别求偏导结果为0,用一个直观的图来表示:
图3
我们看到这条曲线,前半部分是呈下降的趋势,也就是变化率(导数)为负的,后半部分呈上升的趋势,也就是变化率(导数)为正,那么分界点的导数为0,也就是取得最小值的地方。这是一个变量的情况,对于多个变量的情况,要让S取得最小值,那最好是对β1和β2分别求导(对β1求导的时候,把β2当常量所以叫求偏导),值为0:
图3
看到这个我们就熟悉了,两个变量,刚好有两个方程式,初中学过,那么很容易得出:
图4
其实也就意味着:
图5
这个函数也就是我们要的直线,这条直线虽然不能把那些点串起来,但它能最大程度上接近这些点。也就是说5公里的时候,成本为3.5+1.4x5=10.5块,虽然不完美,但是很接近实际情况。这就是最小二乘法。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值