吴恩达《机器学习》课程学习笔记(二)—— 单变量线性回归

吴恩达《机器学习》课程学习笔记(二)—— 单变量线性回归

一、模型描述

上一章已经通过卖房价格的模型简单介绍了什么是回归:我们尝试将变量映射到某一个连续函数上。

这章我们将这个问题简单地量化为单变量线性回归模型(Univariate linear regression)来理解它。

首先,我们定义三个变量:

  • m=用于训练的样本数
  • \( x^i = \)第i个训练样本“输入”变量/特征量
  • \( y^i = \)​第i个训练样本“输出”变量/特征量

以及一个函数:

\[ h_{\theta }=\theta_{0}+\theta_{1}x \space\space\space\space\space\space\space\space\space\space\space\space\space\space\space(1.1) \]

其中h是hypothesis(假设)的意思,当然,这个词在机器学习的当前情况下并不是特别准确。θ是参数,我们要做的是通过训练使得θ的表现效果更好。

 

二、代价函数(Cost function)

我们现在有了数据集,并且可以通过改变参数来调整h函数,那么,我们如何定义什么是“更好”的h函数呢?

一般而言,我们通过调整θ,使得所有训练集数据与其拟合数据的差的平方和更小,即认为得到了拟合度更好的函数。

我们引入了代价函数:

\[ J(\theta_{0},\theta_{1})=\frac{1}{2m}\sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})^2 \space\space\space\space\space\space\space\space\space\space\space\space\space\space\space(2.1)\]

注意,其中的\( \frac{1}{2m} \)取2m而非m当系数是为了后面梯度下降算法里,求导后消掉2.

当代价函数J最小的时候(​\( minimize\space\space J(\theta_{0},\theta_{1}) \)​),即找到了对于当前训练集来说拟合度最高的函数h。对于我们研究的单变量线性回归而言,J函数关于θ的等高线图像大致如下:

当我们找到了这些同心椭圆的中心点时,就找到了J函数的最小值,此时拟合度更好。

 

三、梯度下降(Gradient descent)

现在我们得到了代价函数J,那么我们如何求出J的最小值呢?

这一章我们使用数值计算(numerical calculation)的方法(后面我们会学习解析解法):

  • 从某一对​\( \theta_{0},\theta_{1} \)​出发
  • 不断尝试改变\( \theta_{0},\theta_{1} \),使得\( J(\theta_{0},\theta_{1})\) 减小,逐步逼近最小值(迭代)
  • 改变的策略:每一次改变的方向,取当前位置梯度下降的方向:

 

上面是一个非线性函数的代价函数,我们可以看到,选取不同的初始值θ,可能会使得迭代的代价函数最后进入不同的极小值点。

梯度下降算法的公式如下。其中的α是学习率(learning rate),本节不讨论它。

\[ \theta_{j}:=\theta_{j}-\alpha\frac{\partial }{\partial \theta_{j}}J(\theta_{0},\theta_{1}) \space\space\space\space\space\space\space\space\space\space\space\space\space\space\space(3.1)\]

其中θ=1或2。计算得:

\[ \theta_{0}:=\theta_{0}-\alpha\frac{\partial }{\partial \theta_{0}}J(\theta_{0},\theta_{1}) \space\space\space\space\space\space\space\space\space\space\space\space\space\space\space \]

\[ \theta_{1}:=\theta_{1}-\alpha\frac{\partial }{\partial \theta_{1}}J(\theta_{0},\theta_{1})x^{(1)} \space\space\space\space\space\space\space\space\space\space\space\space\space\space\space \]

迭代的步骤如下:

  • \[ temp0:=\theta_{0}-\alpha\frac{\partial }{\partial \theta_{0}}J(\theta_{0},\theta_{1}) \]

  • \[ temp1:=\theta_{1}-\alpha\frac{\partial }{\partial \theta_{1}}J(\theta_{0},\theta_{1}) \]

  • \[ \theta_{0}:=temp0 \]

  • \[ \theta_{1}:=temp1 \]

特别需要注意的是,在这个迭代算法中,参数θ是计算完当前迭代轮次所有的θ后才统一更新,而不是算出一个更新一个(若算出一个更新一个,那么方向就不是当前点的梯度方向了)。

现在我们回过头来看,对于单变量线性回归的梯度函数而言,其代价函数J关于参数θ的图像如下,只有一个极值以及最值:

我们让模型再简化一下,取​\( J(\theta)=\theta x \)​,其代价函数关于θ的图像如下。我们通过观察他的迭代过程,有助于理解梯度下降算法:

可以看到,

  • 当θ大于最小值时,导数为正,那么迭代公式​\( \theta:=\theta-\alpha\frac{\partial }{\partial \theta}J(\theta) \)​里,θ减去一个正数,向左往最小值逼近;
  • 当θ小于最小值时,导数为负,那么迭代公式​\( \theta:=\theta-\alpha\frac{\partial }{\partial \theta}J(\theta) \)​里,θ减去一个负数,向右往最小值逼近;


4 Comments

感谢站长,站长的笔记整理的很详细,网站也做得很好。

Reply

谢谢鼓励:)

Reply

您好 想咨询一下第一次作业梯度下降时 您的代码是theta = theta – alpha/m * X’ * (X*theta – y);
代价函数有两个参数theta0和theta1,为什么没有分别写theta0和theta1?望回复,谢谢

Reply

不好意思这么久了才看到……
课程作业内容我记得不是特别清楚了,下面是我刚刚回顾之后的理解:
在ex1.m中,使用的theta是一个向量,其初始化为
theta = zeros(2, 1); % initialize fitting parameters
也就是theta = (theta0, theta1)’
因此gradientDescent.m是对theta向量计算,即可同时计算出theta0 theta1 theta2等参数了

Reply

Leave a Reply

Your email address will not be published.

*
*
*

Insert math as
Block
Inline
Additional settings
Formula color
Text color
#333333
Type math using LaTeX
Preview
\({}\)
Nothing to preview
Insert