最简单的机器学习算法-线性回归和梯度下降法

首先介绍一下监督学习和无监督学习,相信有些基础的同学对这两个概念是没有什么疑惑的。

这两个概念是十分简单和基础的,只要理解了“监督”的含义即可。监督是指训练数据对算法输出的结果有无监督,也就是说,在训练数据集中,对于给定的输入是否有给定的输出,如果有,就叫监督学习,如果没有,就叫无监督学习。

举个例子:假设一个机器学习任务是输入变量x、y,求变量z的值。我们手头已经有一些已有的训练数据,x、y、z均已知,想要达到的目标呢,是求当有新的x、y输入时z的值,那么这就是一个监督学习的任务。因为当我们在使用训练数据训练算法的时候,算法输出的值z’可以与z进行比较,从而判定结果的准确度,也就是说训练数据中的z对算法的输出进行了监督。当然大家对z的理解不要太过狭义,z可以使数值型连续数据,可以是分类类别这样的离散数据。

无监督学习恰恰是在训练数据中没有这样的z,这样的学习任务目前来看仿佛有点难以理解,不过不用紧张,之后介绍到聚类的时候会有直观的印象。

相比之下,监督学习是更为常见和实用的学习任务,大多数的算法都属于监督学习的范畴。当然,我们不必纠结于一个算法是监督学习还是无监督学习,重要的是理解面对不同类型学习问题的解决思路。

 

今天介绍的线性回归可以说是机器学习里最简单的算法了,或者说他根本算不上一个算法,不过是我们高中课本上的一个公式在大量数据上的应用罢了。但线性回归是很多算法的源头所在,为了便于之后的学习,我们还是从源头学起。

没错就是这个公式:

Y=θx + b

需要注意的是这里的X、Y、θ、b都可以是向量的形式,X是输入向量,Y是输出向量,θ和b是我们要学习出来的待定参数。输入向量X的维度决定了线性回归的维度,也决定了我们需要确定的参数θ和b的维度,为了简化呢,我们先把X理解为一维向量,也就是说X是一个数值。我们有的是一些相互对应的X、Y的值,他们叫做训练样本,想知道当有一个新的X值出现时,Y的值应该是多少。说到这里是不是有一种这样的感觉:

 

计算题:已知Y=θx + b,且当X=1时Y=5,X=2时Y=7,求θ和b的值。

 

相信大家都会解这个二元一次方程,好的,这个算法讲完了,我们下期再见。



不知道你信不信,原理就是这么简单。但是现在情况变了,怎么了呢,我们有很多的X和Y,我们知道,在多元一次方程组中,当未知量的个数等于公式的个数时,是恰恰有一组唯一的未知量的解,当未知量的个数大于公式的个数时,会有无穷多组解,当未知量的个数小于公式的个数时,怎么样?tan90,没有解。巧了,我们往往就处在这个没有解的情况下。

 

这种情况下我们又想完成上述的给定X求Y值的任务,怎么办呢,只能猜了,并且要让猜的结果尽可能接近真实的Y值,这就是预测,线性回归就是预测算法的一种。

 

我们认为,所有的X、Y是由一条直线Y=θx+b(未知)确定的,我们训练集里的数据为什么不都在这条直线上呢,是因为训练数据里的y由于某种不确定原因产生了微小的数值改变,如果我们求得的直线是h(x) = θ’x+b’,也就是说对于每一个x,我们计算出来的h(x)就是预测的y的值,为了让我们预测的直线更接近真实的直线,我们认为,对于一个点(x,y),(h(x)-y)2越小,两条直线越接近,θ’和b’的值也就更接近θ和b的真实值。

 

这种问题可以采用最小二乘法来解决,直接把数值带入到最小二乘法的公式:

θ = (XTX)-1XTY

中就可以求得θ。但这种方法一是当X、Y的尺寸比较大的时候比较慢,二是不通用,只能用在线性回归里,所以我们暂不考虑这种方法。

 

另一种方法,也就是梯度下降法:

为了让两条直线尽可能接近呢,我们用训练样本去监督接近的程度:

如果有m个样本点(x、y的取值对),每个样本点记为(xi,yi),构造这样一个函数:


我们计算的直线与真实的直线越接近,函数L的值就越小,L正是起到了监督学习中的监督作用,透过L我们可以知道目前算法的好坏,于是人们给他起了一个名字,叫做代价函数,既然叫代价了,那肯定是越小越好。

 

这里大家要注意了,函数L的自变量是θ’和b’,而不是x和y。

 

将所有的x、y代入到公式中去,相当于我们有一个关于θ’和b’的函数L,现在要计算他取得最小值时θ’和b’的取值,对两个自变量θ’和b’分别求导数,长这个样子: 


再强调一下,上面式子中,所有x、y的值我们是知道的,不知道的是θ’和b’的值。

为什么要求导数呢,我们说了,要调整参数的值让他们更好地满足约束条件,也就是调整θ’和b’的值使得L更小。

想一下导数的含义,导数代表的是一个函数在某个点处函数值的增长趋势,那么很容易想到,我们调整θ’和b’,让他们逆着增长趋势变化,就可以让L的值变小。也就是说我们要这样调整:


α叫做学习速率,控制了我们逆着增长趋势变化的多少,可以人为的去选择一个数值,0.1、1、10都可以,适当的α选择可以减少迭代的次数,过大过小都会产生一些问题,我们可以一个一个地试一试,当然之后我会针对α的选择做单独的解释,大家可以先不考虑这个问题。

 

这样看就很神奇了,理论上讲,我们可以在第一轮迭代的时候给θ’和b’赋予任何值,然后他迭代这个过程,慢慢把自己调整到最好的那个值上去,这个过程就叫做学习。

 

等算法迭代一些次数停下来的时候,你就得到了θ’和b’的值,也就得到了一个线性回归的方程式,当有新的x出现时,将它代入到方程式里面,就可以得到预测的y值啦。

 

梯度下降的主要过程呢就是先随机的给要确定的参数赋上初值,然后根据某种规律调整参数的值使代价函数的值降低,迭代这个过程直到代价函数的值几乎不改变。

 

还有几点要提醒大家一下:

1. 在每一轮迭代中,每一个参数的值都要被更新,尤其在不是一维线性回归的情况下,θ的每一维都要同步的被更新,并且对于每一维,学习速率α必须是相同的;

2. 本文使用的梯度下降在每次迭代中用到的是所有的训练样本,因此时间、空间开销都比较大,这只是梯度下降的一种,还有其他方法,不同的方法适用情况不同,会在之后讲解;

3. 代价函数乘或除一定的倍数,不影响算法的结果,因为我们在用L的相对大小衡量算法的好坏,等比的放大缩小是不会产生影响的,同样,导数前面的倍数也是不会有影响的,学习速率会吸收倍数带来的影响,因此为了防止计算中数值过大导致溢出,常常取平均值。

 

关于梯度下降法更多的知识会在以后不断讲解,现在疑惑的地方会一点一点搞明白,大家不要着急,先理解大概过程。


为了帮助大家更好的理解和掌握,我制作了一个代码框架,可以帮助大家一步一步完成梯度下降算法,欢迎大家下载练习哦。

关注公众号,后台回复“梯度下降”获取练习数据和代码。





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值