【机器学习】线性回归

一、什么是回归

        分类任务很好理解,比如去银行贷款,银行会根据贷款人的年龄、工资(特征)去决定贷款(标签1)和不贷款(标签0)。而回归任务,是预测允许贷款的额度(标签是一个一定范围的数值)。如下图所示:

        每个特征对结果的影响程度不同,比如对于银行贷款问题,工资(x_{1})肯定要比年龄(x_{2})的影响大。因此给x_{1}x_{2}分别分配一个权重\theta _{1}\theta _{2}。现在就得到了一个模型y=\theta _{1}x_{1}+\theta _{2}x_{2}

现在我们需要做的事就是,什么样的\theta _{1}\theta _{2}对于这个模型来说是最合适的

二、什么是线性

        上面这个图中,红色的点就是数据,绿色的面就是模型。通俗地讲,线性就是这个模型是一个平面,并不能做到与每一个点完全拟合(不是曲面)。因此,对于线性回归任务,就是要找到一个平面,这个平面能尽可能地拟合更多的数据

三、数学表达

(1)拟合的平面

        现在,我们得到了一个拟合的平面:h_{\theta}\left ( x \right )=\theta _{0}+\theta _{1}x_{1}+\theta _{2}x_{2}。其中,\theta _{0}是偏置系数,它的作用是对平面的位置进行微调,而不改变平面的倾斜度,已找到最合适的平面。为了方便计算机的计算,会先将数据转换成矩阵的形式,即把拟合平面转换成矩阵的叉乘。如下面的一个数据:

        每一个样本就是矩阵的行,每一个特征就是矩阵的列。补充x_{0}全为1,是为了给拟合平面h_{\theta}\left ( x \right )中的\theta _{0}配一个权重,方便转换成矩阵叉乘的形式,补充值为1就不会对平面有任何影响。最后得到拟合的平面:h_{\theta}\left ( x \right )=\theta _{}^{T}X,其中\theta _{}^{T}大小为1x3,X大小为3xn,3是特征个数(包含x_{0}),n是样本个数。

        真实值与预测值之间存在差异,如图上粉色的点是预测值,同一个x_{1}x_{2}对应的红色点就是真实数据,它们之间的差异被称为误差,记作\varepsilon。因此对于每一个样本的真实标签y_{}^{\left ( i \right )}和模型预测的标签\theta _{}^{T}x_{}^{\left ( i \right )},都存在这样的关系:y_{}^{\left ( i \right )}=\theta _{}^{T}x_{}^{\left ( i \right )}+\varepsilon _{}^{\left ( i \right )}

(2)误差的含义

        先说明概念:误差\varepsilon _{}^{\left ( i \right )}是独立同分布的,并且服从均值为0、方差为\theta_{}^{2}的高斯分布

        为什么独立:样本之间是相互独立的,比如张三和李四一起到银行贷款,贷多少钱与别人没关系,不会因为张三叫银行给李四多贷点,银行就给多贷。因此,样本对应的误差,误差之间也是相互独立的。故在收集数据时,希望样本间是独立的,不希望他们之间有顺序或者有逻辑关系,在对样本进行学习前,通常会对它们进行shuffle(打乱)

        为什么同分布:比如张三去建行贷款,李四去农行贷款,这两个银行的贷款规则都不一样,用同一个模型去预测就不太准确了。因此尽可能要求误差同分布,类似于生物实验中的单一变量原则

        为什么是均值为0的高斯分布:均值为0的意思,打个比方,银行会少给有些人额度,也会多给有些人额度(多给少给的部分就相当于误差),但综合起来的平均值是趋向于0的。高斯分布又叫正态分布,它的形状是中间多,两边少,均值为0的正态分布是以\varepsilon =0为对称轴的,如上图所示。达到的效果就是,误差比较小的情况是比较正常的(银行多给或者少给几块钱),出现误差比较大的情况的概率要尽可能小(银行多给或者少给几万块钱)。所以,误差服从均值为0的高斯分布目的是让大多数误差接近于0。

        那我们所求的模型的误差,要完全符合均值为0、方差为\theta_{}^{2}的高斯分布吗?其实,数学推导只是对理论的支撑,实际的情况并不能做到百分百准确,我们做的只是找到最优解,能解决实际的问题即可,而不是要求完全与数学得到的数值一模一样。

        因为误差服从高斯分布,所以将均值0带入正态分布的概率密度函数得到(expA表示e^{A}):

p\left ( \varepsilon _{}^{\left ( i \right )} \right )=\frac{1}{\sqrt{2\pi }\sigma }exp\left ( -\frac{\left ( \varepsilon _{}^{\left ( i \right )}-0 \right )^{2}}{2\sigma ^{2}} \right )                                    式(1)

        这是一个关于误差\varepsilon ^{\left ( i \right )}的式子,但是我们并不需要求解\varepsilon ^{\left ( i \right )},而是需要求解权重\theta ^{T}。因此,把y_{}^{\left ( i \right )}=\theta _{}^{T}x_{}^{\left ( i \right )}+\varepsilon _{}^{\left ( i \right )}改成y_{}^{\left ( i \right )}-\theta _{}^{T}x_{}^{\left ( i \right )}=\varepsilon _{}^{\left ( i \right )},再代入式(1),得到:

p\left (y^{\left ( i \right )}|x^{\left ( i \right )};\theta \right )=\frac{1}{\sqrt{2\pi }\sigma }exp\left ( -\frac{\left (y^{\left ( i \right )}-\theta ^{T}x^{\left ( i \right )}\right )^{2}}{2\sigma ^{2}} \right )                                式(2)

        这样就转换成了关于\theta ^{T}的式子。接下来我们要求解的问题是,\theta是什么值,能让误差最小,即预测值\theta _{}^{T}x_{}^{\left ( i \right )}更接近真实值y_{}^{\left ( i \right )}

(3)最大似然估计

        让真实值出现概率最大的参数,用在接下来的预测中,能让预测值更接近于真实值。比如,在学校中抽取100个人全是男生,那就说明在这个学校中,抽取的一个同学是男生的概率很大,那么再抽取一个人,更可能是男生。

        最大似然估计的基本思想是:在已知数据样本的情况下(已知真实标签y^{\left ( i \right )}和对应的特征x^{\left ( i \right )}),寻找能够使得这些数据出现的概率最大的参数值(寻找让真实值出现概率最大的\theta),这个概率就用似然函数表示。换句话说,通过最大化似然函数来估计参数值(求得\theta)。

① 写出似然函数

        似然函数,即样本出现的概率关于模型参数的函数。因为需要用很多个样本(抽取很多个都是男生,再抽一个是男生的概率才大),并且每个样本都是独立同分布的,所以是将式(2)进行累乘(独立的随机变量,它们的联合概率可以表示为各自边缘概率的乘积),得到似然函数:

L\left ( \theta \right )=\prod_{i=1}^{m}p\left (y^{\left ( i \right )}|x^{\left ( i \right )};\theta \right )=\prod_{i=1}^{m}\frac{1}{\sqrt{2\pi }\sigma }exp\left ( -\frac{\left (y^{\left ( i \right )}-\theta ^{T}x^{\left ( i \right )}\right )^{2}}{2\sigma ^{2}} \right )         式(3)

② 对似然函数取对数

        为了方便后续求导,对似然函数取对数,改变的只是概率的最大值,而不会改变概率的最大值对应的参数值\theta。因此,取对数对我们求\theta没有影响。

logL\left ( \theta \right )=log\prod_{i=1}^{m}\frac{1}{\sqrt{2\pi }\sigma }exp\left ( -\frac{\left (y^{\left ( i \right )}-\theta ^{T}x^{\left ( i \right )}\right )^{2}}{2\sigma ^{2}} \right )=\sum_{i=1}^{m}log\frac{1}{\sqrt{2\pi }\sigma }exp\left ( -\frac{\left (y^{\left ( i \right )}-\theta ^{T}x^{\left ( i \right )}\right )^{2}}{2\sigma ^{2}} \right )                     式(4)

        将式(4)化简为:

logL\left ( \theta \right )=mlog\frac{1}{\sqrt{2\pi }\sigma}-\frac{1}{\sigma ^{2}}\frac{1}{2}\sum_{i=1}^{m}\left (y^{\left ( i \right )}-\theta ^{T}x^{\left ( i \right )}\right )^{2}                    式(5)

        对于\theta来说,mlog\frac{1}{\sqrt{2\pi }\sigma}是一个常数;\frac{1}{\sigma ^{2}}\frac{1}{2}\sum_{i=1}^{m}\left (y^{\left ( i \right )}-\theta ^{T}x^{\left ( i \right )}\right )^{2}是一个恒正的值。因此,想求logL\left ( \theta \right )的最大值,就是\frac{1}{\sigma ^{2}}\frac{1}{2}\sum_{i=1}^{m}\left (y^{\left ( i \right )}-\theta ^{T}x^{\left ( i \right )}\right )^{2}的最小值,然后把它常数项\frac{1}{\sigma ^{2}}去掉,保留\frac{1}{2}(后面求导正好可以抵消),得到目标函数(最小二乘法)

J\left ( \theta \right )=\frac{1}{2}\sum_{i=1}^{m}\left (y^{\left ( i \right )}-\theta ^{T}x^{\left ( i \right )}\right )^{2}                                      式(6)

        x^{\left ( i \right )}要看成nx1的矩阵,包含n个特征。如下图:

        把分开算r^{\left ( i \right )}转换成,直接算出一整个r向量:

        因为是算的各项平方,不用考虑正负号,所以y-X\theta还是X\theta -y计算的结果都是一样的。因此,把r^{(i)}这个中间结果去掉,J\left ( \theta \right )就可以转化为:

J\left ( \theta \right )=\frac{1}{2}\left (X\theta -y\right )^{T}\left (X\theta -y\right )                                       式(7)

        其中X大小为mxn,m是样本个数,n是特征个数。

③ 求偏导并令偏导为0

        求偏导:

        \frac{\partial J\left ( \theta \right )}{\partial \theta }=\frac{\partial (\frac{1}{2}\left (X\theta -y\right )^{T}\left (X\theta -y\right ))}{\partial \theta }=\frac{\partial (\frac{1}{2}\left (\theta^{T}X^{T} -y^{T}\right )\left (X\theta -y\right ))}{\partial \theta }=\frac{\partial \frac{1}{2}\left (\theta^{T}X^{T}X\theta-\theta^{T}X^{T}y- y^{T}X\theta + y^{T}y\right )}{\partial \theta }=\frac{1}{2}(2X^{T}X\theta -X^{T}y-(y^{T}X)^{T})=X^{T}X\theta-X^{T}y

        令偏导为0:

X^{T}X\theta-X^{T}y=0

        两边乘上\left ( X^{T}X \right )^{-1}得到:

\theta =\left ( X^{T}X \right )^{-1}X^{T}y

③ 存在的问题

        这样求解得到的\theta,仅仅是通过一次计算得到,并没有体现出机器学习逐步的学习过程;并且对X^{T}X求逆不一定成功,因为不是所有的矩阵都有逆矩阵,这种方法在线性回归问题上能求得结果(特例),但在其它问题上并不适用。因此,最小二乘法并不通用,我们需要另寻方法。

四、梯度下降

        交给机器一堆数据,再给一个学习的方向(目标函数达到最小值),然后机器朝着这个目标,一步步迭代优化完成,而不是直接一步求出结果,这体现了机器学习的过程(优化思想)梯度下降就是优化算法之一

(1)通俗地理解

        如上图所示,想要快速地到达最小值处,就需要每次沿着当前所在位置的梯度方向的反方向走梯度的方向是函数增长最快的方向),每走一步都需要更新梯度的方向。如果步长太大,可能会直接走到对面,反复在山谷之间胡乱震荡,而达到不了谷底(无法收敛或收敛效果不好);或者悬在空中。因此,步长应该小一点,稳步向下走,最终在谷底的很小的一个局部之间徘徊,就说明趋于了稳定,达到了最小值处。但是步长也不能过于小,因为会导致到达最小值处的速度非常慢

        梯度下降法需要分别计算不同参数的梯度,再将所有梯度对应的向量相加,就得到要走的方向和步长。如下图所示:

(2)参数的更新

① 目标函数

        为什么要将所有样本的误差求和:算法在更新参数时要考虑所有样本的影响,而不是仅仅依赖于部分样本。

        为什么是总误差的均值:均值可以减少异常值对总误差的影响,并且尤其在大规模数据集上,计算均值的梯度比计算总和的梯度更高效

        只是为了求目标函数最小点,为什么不把平方去掉,改为绝对值,让式子更简单呢:如果改为绝对值,x的绝对值会在x=0处不可导,同理也会让目标函数在某点处不可导,这样会多一些讨论情况,求最小点不方便。

        为什么不把1/2去掉:后面求偏导,会刚好把1/2抵消掉。

        目标函数:

J\left ( \theta \right )=\frac{1}{2m}\sum_{i=1}^{m}\left (y^{\left ( i \right )}-h_{\theta}\left ( x^{\left ( i \right )} \right )\right )^{2}

        将目标函数对\theta_{j}求偏导(跟\theta_{j}无关的项直接当成常数,求导消掉了):

\frac{\partial J\left ( \theta \right )}{\partial \theta _{j}}=-\frac{1}{m}\sum_{i=1}^{m}\left (y^{\left ( i \right )}-h_{\theta}\left ( x^{\left ( i \right )} \right )\right )x_{j}^{\left ( i \right )}

② 按梯度下降的分类更新参数

        \frac{\partial J\left ( \theta \right )}{\partial \theta _{j}}是梯度方向,更新参数的方向是梯度反方向,所以更新当前的\theta_{j},加的是 -\frac{\partial J\left ( \theta \right )}{\partial \theta _{j}},正好把式子里的负号抵消掉了。以下的\theta _{j}^{'}是更新后的参数;x_{j}^{\left ( i \right )}中的 i 和 j 表示第 i 个样本的第 j 个特征;\alpha是学习率,也就是步长。

        批量梯度下降\theta _{j}^{'}=\theta_{j}+\alpha \frac{1}{m}\sum_{i=1}^{m}\left (y^{\left ( i \right )}-h_{\theta}\left ( x^{\left ( i \right )} \right )\right )x_{j}^{\left ( i \right )}。它的优点是每次迭代比较平稳地往好的方向走,就算有浮动也比较少和细微;缺点是会计算所有样本的误差和,效率比较慢

        随机梯度下降:每次迭代随机抽取一个样本做处理,效率大大提升,但是抽取的样本可能并不好。因此,每次参数的更新,可能是往目标函数减小的方向走,也可能是往目标函数增大的方向走,下降不平稳且精准度较低\theta _{j}^{'}=\theta_{j}+\alpha \left (y^{\left ( i \right )}-h_{\theta}\left ( x^{\left ( i \right )} \right )\right )x_{j}^{\left ( i \right )}。下图中通过损失曲线图,表现了两种梯度下降算法的区别,损失相当于误差:

        小批量梯度下降:在实战中通常使用这个算法,它综合了批量梯度下降和随机梯度下降,每次迭代随机抽取batch个样本,既不会因为样本数量太少导致收敛过于混乱而精准度过低,也不会因为样本数量太大而计算效率过低\theta _{j}^{'}=\theta_{j}+\alpha \frac{1}{batch}\sum_{k=i}^{i+batch-1}\left (y^{\left ( k \right )}-h_{\theta}\left ( x^{\left ( k \right )} \right )\right )x_{j}^{\left ( k \right )}

        上面所说的batch,按照程序员的习惯,通常是取值2^{6}2^{7}2^{8},即64、128、256。在计算机性能允许的情况下,batch取较大值更好,很少低于64。

        学习率(LR):即步长,通常取较小的值,如0.01、0.001。实战时先试一下0.01,如果效果不好,再试0.001,小到计算机性能和时间能容忍的程度(计算机性能差跑不起来、学习时间要好几年肯定不行了)。如下图是不同学习率的损失曲线图:

        从上图可以看到,非常高的学习率会导致损失值无法收敛;高的学习率会导致损失值收敛效果不好;低的学习率导致损失值收敛速度缓慢;好的学习率让损失值既收敛效果较好,又收敛速度较快。通常以较高学习率开始训练,加速更新模型;然后根据学习进度逐渐降低学习率。

  • 15
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值