前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >011.线性回归算法推导

011.线性回归算法推导

作者头像
qubianzhong
发布2018-10-10 11:59:12
8000
发布2018-10-10 11:59:12
举报
文章被收录于专栏:行者常至行者常至
  • 之前一直比较纠结,最大似然估计的定义为什么是概率密度函数(或概率质量函数)的累积,看了上面的似然函数中的计算实例才逐渐明白。似然函数取得最大值表示相应的参数能够使得统计模型最为合理。

线性模型

线性回归是依据样本数据上抽取的特征,预测连续值结果。简单的例子如依据身高去预测体重,如实验室中根据有色物质浓度得到吸光度曲线,再根据未知浓度有色物质吸光度得到其浓度,如上图所示。稍复杂点的如已知房子的很多特征,房子面积、卧室数目、房子所在街道、小区等,去预测房价。

  假设有份房价预测数据,我们有n个特征(房子面积,卧室数量…),m个样本(房子1,房子2…),θ1为房子面积系数,θ2为卧室数量系数…,hθ(x)表示最后的房价,通过线性回归,我们可以得到以下公式:

hθ(x)=θ0x0+θ1x1+...+θnxx=θTXh_{\theta}(x)=\theta_0x_0+\theta_1x_1+...+\theta_nx_x=\boldsymbol{\theta}^T\boldsymbol{X}hθ​(x)=θ0​x0​+θ1​x1​+...+θn​xx​=θTX

x0x_0x0​为1,θ0θ_0θ0​即代表常数项,θθθ和XXX默认为列向量,所以θθθ需要转置乘以XXX再加,使用矩阵是因为矩阵运算高效。


误差项分析

  真实值和预测值之间肯定是存在差异的(用ε来表示误差)。对于每个样本:

y(i)=θTx(i)+ε(i)y^{(i)}=\boldsymbol{\theta }^Tx^{(i)}+\varepsilon^{(i)}y(i)=θTx(i)+ε(i)

  统计学家对误差项做了符合普遍规律的假设,即误差项ε是独立且具有相同的分布,服从均值为0方差为ε的高斯分布

独立: 如果是预测房价:房屋1的价格和房屋2的价格是没有关系的,样本之间互相不会影响。

同分布: 如果是预测房价:每个房子的背景以及自身的价格变量必须相同,不能房子1是上海的,房子2是新疆的。


推导

  (1) 预测值与误差:y(i)=θTx(i)+ε(i)y^{(i)}=\boldsymbol{\theta }^Tx^{(i)}+\varepsilon^{(i)}y(i)=θTx(i)+ε(i)

  (2) 由于误差服从高斯分布:p(ε(i))=12πσexp⁡(−(ε(i))22σ2)p\left( \varepsilon ^{(i)} \right) =\frac{1}{\sqrt{2\pi}\sigma}\exp \left( \frac{-\left( \varepsilon ^{(i)} \right) ^2}{2\sigma ^2} \right)p(ε(i))=2π​σ1​exp(2σ2−(ε(i))2​)

  将(1)代入(2):p(y(i)∣x(i),θ)=12πσexp⁡(−(y(i)−x(i))22σ2)p\left( y^{(i)}|x^{(i)},\theta \right) =\frac{1}{\sqrt{2\pi}\sigma}\exp \left( \frac{-\left( y^{(i)}-x^{(i)} \right) ^2}{2\sigma ^2} \right)p(y(i)∣x(i),θ)=2π​σ1​exp(2σ2−(y(i)−x(i))2​)

   似然函数:

L(θ)=Πmi=1p(y(i)∣x(i);θ)=Πmi=112πσexp⁡(−(y(i)−θTx(i))22σ2) L\left( \theta \right) =\underset{i=1}{\overset{m}{\Pi}}p\left( y^{(i)}|x^{(i)};\theta \right) =\underset{i=1}{\overset{m}{\Pi}}\frac{1}{\sqrt{2\pi}\sigma}\exp \left( -\frac{\left( y^{(i)}-\boldsymbol{\theta }^Tx^{(i)} \right) ^2}{2\sigma ^2} \right) \ \ L(θ)=i=1Πm​p(y(i)∣x(i);θ)=i=1Πm​2π​σ1​exp⎝⎜⎛​−2σ2(y(i)−θTx(i))2​⎠⎟⎞​

累乘难求最大值,于是引入对数

   对数似然函数:

l(θ)=log⁡(L(θ))=log⁡(Πmi=112πσexp⁡(−(y(i)−θTx(i))22σ2))l\left( \theta \right) =\log \left( L\left( \theta \right) \right) =\log \left( \underset{i=1}{\overset{m}{\Pi}}\frac{1}{\sqrt{2\pi}\sigma}\exp \left( -\frac{\left( y^{(i)}-\boldsymbol{\theta }^Tx^{(i)} \right) ^2}{2\sigma ^2} \right) \right)l(θ)=log(L(θ))=log⎝⎜⎛​i=1Πm​2π​σ1​exp⎝⎜⎛​−2σ2(y(i)−θTx(i))2​⎠⎟⎞​⎠⎟⎞​

l(θ)=∑i=1mlog⁡(12πσ)−∑i=1m(y(i)−θTx(i))22σ2l\left( \theta \right) =\sum\limits_{i=1}^m{\log \left( \frac{1}{\sqrt{2\pi}\sigma} \right)}-\sum\limits_{i=1}^m{\frac{\left( y^{(i)}-\boldsymbol{\theta }^Tx^{(i)} \right) ^2}{2\sigma ^2}}l(θ)=i=1∑m​log(2π​σ1​)−i=1∑m​2σ2(y(i)−θTx(i))2​

l(θ)=∑i=1mlog⁡(12πσ)−1σ2⋅12⋅∑i=1m(y(i)−θTx(i))2l\left( \theta \right) =\sum\limits_{i=1}^m{\log \left( \frac{1}{\sqrt{2\pi}\sigma} \right)}-\frac{1}{\sigma ^2}\cdot \frac{1}{2}\cdot \sum\limits_{i=1}^m{\left( y^{(i)}-\boldsymbol{\theta }^Tx^{(i)} \right) ^2}l(θ)=i=1∑m​log(2π​σ1​)−σ21​⋅21​⋅i=1∑m​(y(i)−θTx(i))2

   因为 ∑i=1mlog⁡(12πσ)\sum\limits_{i=1}^m{\log \left( \frac{1}{\sqrt{2\pi}\sigma} \right)}i=1∑m​log(2π​σ1​)是常数,所以只要求1σ2⋅12⋅∑i=1m(y(i)−θTx(i))2\frac{1}{\sigma ^2}\cdot \frac{1}{2}\cdot \sum\limits_{i=1}^m{\left( y^{(i)}-\boldsymbol{\theta }^Tx^{(i)} \right) ^2}σ21​⋅21​⋅i=1∑m​(y(i)−θTx(i))2最小就好了。

   所以,我们定义损失函数:损失函数:J(θ)=12∑i=1m(yi−θTxi)2\text{损失函数:}J\left( \theta \right) =\frac{1}{2}\sum\limits_{i=1}^m{\left( y^i-\boldsymbol{\theta }^Tx^i \right) ^2}损失函数:J(θ)=21​i=1∑m​(yi−θTxi)2 ,  12\frac{1}{2}21​保留是为了后续求导系数约分

   其中:

x(i)x^{(i)}x(i)表示向量x中的第i个元素

y(i)y^{(i)}y(i)表示向量y中的第i个元素

   下面使用矩阵计算,因为使用矩阵的效率更高。

J(θ)=12(Y−θX)T(Y−θX)J\left( \theta \right) =\frac{1}{2}\left( \boldsymbol{Y}-\boldsymbol{\theta X} \right) ^T\left( \boldsymbol{Y}-\boldsymbol{\theta X} \right)J(θ)=21​(Y−θX)T(Y−θX)

=12(YT−XTθT)(Y−θX)=\frac{1}{2}\left( \boldsymbol{Y}^T-\boldsymbol{X}^T\boldsymbol{\theta }^T \right) \left( \boldsymbol{Y}-\boldsymbol{\theta X} \right)=21​(YT−XTθT)(Y−θX)

=12(YTY−XTθTY−YTθX+XTθTθX)=\frac{1}{2}\left( \boldsymbol{Y}^T\boldsymbol{Y}-\boldsymbol{X}^T\boldsymbol{\theta }^T\boldsymbol{Y}-\boldsymbol{Y}^T\boldsymbol{\theta X}+\boldsymbol{X}^T\boldsymbol{\theta }^T\boldsymbol{\theta X} \right)=21​(YTY−XTθTY−YTθX+XTθTθX)

对θT求偏导,令其为零:∇J(θ)=12(−XTY−XTY+2θXTX)=0\text{对}\boldsymbol{\theta }^T\text{求偏导,令其为零:}\nabla J\left( \theta \right) =\frac{1}{2}\left( -\boldsymbol{X}^T\boldsymbol{Y}-\boldsymbol{X}^T\boldsymbol{Y}+2\boldsymbol{\theta X}^T\boldsymbol{X} \right) =0对θT求偏导,令其为零:∇J(θ)=21​(−XTY−XTY+2θXTX)=0

θ=(XTX)−1XTY\boldsymbol{\theta }=\left( \boldsymbol{X}^T\boldsymbol{X} \right) ^{-1}\boldsymbol{X}^T\boldsymbol{Y}θ=(XTX)−1XTY

评估方法

  最常用的评估项

R2R^2R2 的取值越接近于1我们认为模型拟合的越好


梯度下降

yyy轴是我们要优化的损失函数,xxx轴是自变量θθθ,此处以θθθ为例,整个图像就像一个山谷,梯度代表yyy值增大的方向,我们希望θθθ逐渐往y减小的方法走,即与梯度相反的方向去走,最后走到山谷。所以首先,我们要找到梯度方向,即为导数方向,描述多元变量时即为偏导方向,对应着数学中的求导。这个方向也是变化最快的方向,对应导数的值。每次走多远呢?如果步子太大,直接走到对面山上,显然不行,即会出现持续震荡,无法走到最低点。步子走得太小,迭代次数就会很大,即影响了整个的计算效率,这个参数对应的就是学习率ααα。实际过程中,学习率一般选为0.01或0.001等,视情况调整。

  在越接近这个曲线最低点位置的时候,它的斜率会越小,这意味着说学习率乘以斜率的值的大小会越小,也就是行动会越来越缓慢,越来越谨慎,所以迭代了一定的轮次之后,我们会发现θθθ的变化率已经非常非常小了, 那我就可以认为θθθ基本在最低点的位置,然后停止,所以我们通过这样的方式可以找到这个凸函数的全局的最低点。当然,停止策略除了θθθ变化,也可以是迭代次数或是损失函数的变化值小于某个范围。

梯度下降目标函数:

梯度下降,目标函数:J(θ)=12m∑i=1m(hθ(xi)−yi)2(比之前多除以m是表示均值)\text{梯度下降,目标函数:}J\left( \theta \right) =\frac{1}{2m}\sum\limits_{i=1}^m{\left( h_{\theta}\left( x^i \right) -y^i \right)}^2\left( \text{比之前多除以}m\text{是表示均值} \right)梯度下降,目标函数:J(θ)=2m1​i=1∑m​(hθ​(xi)−yi)2(比之前多除以m是表示均值)

θj=θj−αddθJ(θ)=θj−1m(hθ(xi)−yi)xji\theta _j=\theta _j-\alpha \frac{d}{d_{\theta}}J\left( \theta \right) =\theta _j-\frac{1}{m}\left( h_{\theta}\left( x^i \right) -y^i \right) x_{j}^{i}θj​=θj​−αdθ​d​J(θ)=θj​−m1​(hθ​(xi)−yi)xji​

批量梯度下降:∂J(θ)∂θj=−1m∑i=1m(yi−hθ(xi))xji\frac{\partial{J\left(\theta\right)}}{\partial{\theta_j}}=-\frac{1}{m}\sum\limits_{i=1}^m{{\left(y^i-h_\theta{\left(x^i\right)}\right)}{x_j}^i}∂θj​∂J(θ)​=−m1​i=1∑m​(yi−hθ​(xi))xj​i θj=θj+1m∑i=1m(yi−hθ(xi))xji\theta_j=\theta_j+\frac{1}{m}\sum\limits_{i=1}^m{\left(y^i-h_\theta\left(x^i\right)\right){x_j}^i}θj​=θj​+m1​i=1∑m​(yi−hθ​(xi))xj​i

  (容易得到最优解,但是由于每次考虑所有样本,速度很慢)

随机梯度下降:θj=θj+(yi−hθ(xi))xji\theta_j=\theta_j+\left(y^i-h_\theta\left(x^i\right)\right){x_j}^iθj​=θj​+(yi−hθ​(xi))xj​i

  (每次找一个样本,迭代速度快,但不一定每次都朝着收敛的方向)

小批量梯度下降:θj:=θj−α110∑i=1i+9(hθ(x(k)−y(k)))xj(k)\theta_j:=\theta_j-\alpha\frac{1}{10}\sum\limits_{i=1}^{i+9}\left(h_\theta\left(x^{\left(k\right)}-y^{\left(k\right)}\right)\right){x_j}^{\left(k\right)}θj​:=θj​−α101​i=1∑i+9​(hθ​(x(k)−y(k)))xj​(k)

  (每次更新选择一小部分数据来算,实用!)

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年09月27日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 预备知识
  • 线性模型
  • 误差项分析
  • 推导
  • 评估方法
  • 梯度下降
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档