第一部分 Supervised Machine Learning: Regression and Classification
文章目录
- 第一部分 Supervised Machine Learning: Regression and Classification
-
- 线性回归模型
- 代价函数公式
- 理解代价函数
- 可视化代价函数
- 可视化举例
- 梯度下降
- 梯度下降的实现
- 理解梯度下降
- 学习率α
- 用于线性回归的梯度下降
- 运行梯度下降
- 多维特征
- 矢量化(向量化)
- 用于多元线性回归的梯度下降算法
- 正规方程(Normal equation)
- 特征缩放(Feature Scaling)
- 判断梯度下降是否收敛
- 如何设置学习率α
- 特征工程(Feature Engineering)
- 多项式回归(Polynomial Regression)
- 动机与目的
- 逻辑回归(Logistic Regression)
- 决策边界(Decision Boundary)
- 逻辑回归中的代价函数(Cost Function for Logistic Regression)
- 简化逻辑回归代价函数
- 在逻辑回归中实现梯度下降
- 过拟合问题(The Problem of Overfitting)
- 解决过拟合(Addressing Overfitting)
- 正则化的代价函数(Cost Function with Regularization)
- 用于线性回归的正则方法(Regularized Linear Regression)
- 用于逻辑回归的正则方法(Regularized Logistic Regression)
- 下个课程预告
线性回归模型
线性回归模型(Linear Regression Model):将一条直线拟合到数据中。
线性回归模型的例子:根据房子的面积预测房价。
回归与分类的区别:在分类中只有少数可能的输出,有一个离散的可能的输出的有限集合。在回归中有无限多连续可能的数字输出。
除了将数据以坐标轴的方式展示,还有另一种查看有用数据的方法:二维表形式。
描述数据的符号(这些都是机器学习的术语,是人工智能的标准):
- 表示输入的标准符号是小写的x,称为输入变量,也称为特征或输入特征。
- 表示试图预测的输出变量的标准符号,有时也称为目标变量,是小写的y。
- 使用小写的m指代训练样本的总数。
- 为了表示单个训练示例,使用符号括号(x,y)。要参考特定的训练示例,这将对应于左侧表中的特定行。在括号中使用(x(i),y(i))。上标告诉我们这是第 i 个训练样例。【注意,上标 i 不是求幂,只是指第 i 个训练示例。i 只是训练集的一个索引,指的是左表中的第 i 行】
- (x(i),y(i)) = ith training example
这个特定的模型叫线性回归,更具体的说,这是一个变量的线性回归。具有一个输入变量的线性模型的另一个名称是单变量线性回归。
代价函数公式
代价函数(Cost Function)的思想是在机器学习中最普遍和最重要的思想之一,用于线性回归和训练世界上许多最先进的人工智能模型。
线性回归模型: f w , b ( x ) = w x + b f_{w,b}(x)=wx+b fw,b(x)=wx+b,可以简写为 f ( x ) = w x + b f(x)=wx+b f(x)=wx+b。其中w,b称为模型的参数(parameters)。在机器学习中,模型的参数是可以调整的变量训练以改进模型。w,b也被称为系数(coefficients)或权重(weights)。
那么如何确定w,b呢?要回答这个问题,首先来看如何衡量一条线与训练数据的拟合程度。为此,构建一个代价函数:
J ( w , b ) = 1 2 m ∑ i = 1 m ( y ^ ( i ) − y ( i ) ) 2 J(w,b)=\frac{1}{2m}\sum_{i=1}^m {(\hat{y}^{(i)}-{y}^{(i)})}^2 J(w,b)=2m1i=1∑m(y^(i)−y(i))2
y ^ ( i ) − y ( i ) \hat{y}^{(i)}-{y}^{(i)} y^(i)−y(i)称为误差(error),其中m = number of training examples。
注:额外除以2只是为了使后面的计算看起来更简洁。原因在【用于线性回归的梯度下降】部分有提到:求导后刚好可以把2抵消掉。
代价函数J也称为平分误差代价函数。
在机器学习中,不同的人会使用不同的代价函数,对于不同的应用程序,但平分误差代价函数是迄今为止最常用于线性回归,就此而言,对于所有回归问题,都能提供良好的结果。
又 f w , b ( x ) = w x + b f_{w,b}(x)=wx+b fw,b(x)=wx+b,进而 f w , b ( x ( i ) ) = w x ( i ) + b f_{w,b}({x}^{(i)})=w{x}^{(i)}+b fw,b(x(i))=wx(i)+b,又有 y ^ ( i ) = f w , b ( x ( i ) ) \hat{y}^{(i)}=f_{w,b}({x}^{(i)}) y^(i)=fw,b(x(i)),故上述平分误差代价函数又可写为: J ( w , b ) = 1 2 m ∑ i = 1 m ( f w , b ( x ( i ) ) − y ( i ) ) 2 J(w,b)=\frac{1}{2m}\sum_{i=1}^m {(f_{w,b}({x}^{(i)})-{y}^{(i)})}^2 J(w,b)=2m1i=1∑m(fw,b(x(i))−y(i))2
我们的目的是找到使代价函数尽可能小的 w , b 的值。
注:
线性回归模型: f w , b ( x ) = w x + b f_{w,b}(x)=wx+b fw,b(x)=wx+b,其中 f w , b ( x ) f_{w,b}(x) fw,b(x)是 x x x的函数。
代价函数: J ( w , b ) = 1 2 m ∑ i = 1 m ( y ^ ( i ) − y ( i ) ) 2 J(w,b)=\frac{1}{2m}\sum_{i=1}^m {(\hat{y}^{(i)}-{y}^{(i)})}^2 J(w,b)=2m1i=1∑m(y^(i)−y(i))2其中 J ( w , b ) J(w,b) J(w,b)是 w , b w,b w,b的函数。
理解代价函数
这里将讲解如何使用代价函数为模型找到最佳参数。
简化后的线性回归模型,忽略b,或者认为b=0。那么 f w ( x ) = w x f_{w}(x)=wx fw(x)=wx是 x x x的函数,代价函数 J ( w ) J(w) J(w)是 w w w的函数。现在根据 w w w的值画出 f w ( x ) f_{w}(x) fw(x)和 J ( w ) J(w) J(w)的图,下面是 w = 1 w=1 w=1时二者的图像:
下面是 w = 0.5 w=0.5 w=0.5时二者的图像:
下面是 w = 0 , w = − 0.5 w=0,w=-0.5 w=0,w=−0.5时二者的图像:
可以随意取 w w w的值,可以是正数、负数、或0。都可以画出对应的代价函数图像。事实证明,通过计算一个范围的值,可以慢慢追查出代价函数 J ( w ) J(w) J(w)(使其尽可能小的 w w w值),下面是代价函数 J ( w ) J(w) J(w)的整个图像:
代价函数 J ( w ) J(w) J(w)是衡量平方误差有多大的函数,所以应该选择最小化这些平方误差的 w w w,会给我们一个很好的模型。更一般的情况:找到使代价函数 J ( w , b ) J(w,b) J(w,b)最小的 w , b w,b w,b的值。
线性回归的目标是找到参数 w , b w,b w,b使代价函数 J ( w , b ) J(w,b) J(w,b)最小。
可视化代价函数
刚才我们使用的是简化后的线性回归模型 f w ( x ) = w x f_{w}(x)=wx fw(x)=wx,忽略b,或者认为b=0。在这一部分我们将使用完整的线性回归模型 f w , b ( x ) = w x + b f_{w,b}(x)=wx+b fw,b(x)=wx+b。这时 f w , b ( x ) = w x + b f_{w,b}(x)=wx+b fw,b(x)=wx+b是 x x x的函数,代价函数 J ( w , b ) J(w,b) J(w,b)是 w , b w,b w,b的函数。
同样的方法,随意取 w , b w,b w,b的值,并根据 w , b w,b w,b的值画出 f w , b ( x ) f_{w,b}(x) fw,b(x)和 J ( w , b ) J(w,b) J(w,b)的图,并找到使代价函数 J ( w , b ) J(w,b) J(w,b)最小的 w , b w,b w,b的值:
下面以3D表面图的方式展示代价函数 J ( w , b ) J(w,b) J(w,b):
还有另一种绘制代价函数 J ( w , b ) J(w,b) J(w,b)的方法,具有完全相同的功能,即等高线图。
下图中右上角是完全相同的代价函数的等高线图,这些椭圆显示的是3D表面上处于完全相同高度的点,换句话说就是对于代价函数 J ( w , b ) J(w,b) J(w,b)具有相同值得点集。显然,3D表面图的底部是代价函数 J ( w , b ) J(w,b) J(w,b)最小的地方,在等高线图中对应这个最小椭圆的中心。
事实证明,等高线图是可视化3D代价函数 J ( w , b ) J(w,b) J(w,b)的便捷方式,但它只是以2D绘制的。
可视化举例
等高线图可以帮助我们找到使代价函数 J ( w , b ) J(w,b) J(w,b)值最小的 w , b w,b w,b。但显然我们想要的是一种可以用代码编写的高效算法,自动查找参数 w , b w,b w,b的值,以提供最佳拟合线,使代价函数 J ( w , b ) J(w,b) J(w,b)值最小。梯度下降(gradient descent)算法可以做到这点。这个算法是机器学习最重要的算法之一,梯度下降和梯度下降的变化用于训练,不仅仅是线性回归,还用于所有人工智能中的复杂模型。
梯度下降
梯度下降(gradient descent)算法是机器学习最重要的算法之一,梯度下降和梯度下降的变化用于训练,不仅仅是线性回归,还用于所有人工智能中的复杂模型。
梯度下降可以用来最小化任何函数,而不仅仅是线性回归的代价函数 J ( w , b ) J(w,b) J(w,b),事实证明,梯度下降适用于更一般的函数,包括具有两个以上参数的模型的其他代价函数 J ( w 1 , w 2 , . . . , w n , b ) J(w_1,w_2,...,w_n,b) J(w1,w2,...,wn,b)。
要使用梯度下降算法,你所要做的只是从对w和b的初步猜测开始。在线性回归中,初始值是多少并不重要,所以一个常见的选择是将它们都设置为0。例如,可以将w设置为0,并将b设置为0作为初始猜测。使用梯度下降算法,需要做的是继续每次更改参数w和b以尝试降低代价函数 J ( w , b ) J(w,b) J(w,b),直到 J ( w , b ) J(w,b) J(w,b)达到或接近最小值。
需要注意的是,针对不是“碗”状的函数,可能存在不止一个可能的最小值。
梯度:值变化最快的方向。
梯度下降的实现
线性回归模型: f w , b ( x ) = w x + b f_{w,b}(x)=wx+b fw,b(x)=wx+b,有两个参数 w , b w,b w,b。
使用梯度下降算法的过程:
-
参数 w w w每次的取值:
w = w − α ∂ ∂ w J ( w , b ) w=w-α\frac{ \partial }{ \partial w }J(w,b) w=w−α∂w∂J(w,b)
其中, α α α称为学习率(Learning rate),通常介于0~1之间。 α α α所做的是它控制下坡时迈的步子大小(以上图从山顶到山谷下坡的过程为例),如果 α α α非常大,则对应于一个激进的梯度下降过程,即在下坡时迈出大步;如果 α α α非常小,对应下坡时迈出小步。 -
参数 b b b每次的取值:
b = b − α ∂ ∂ b J ( w , b ) b=b-α\frac{ \partial }{ \partial b }J(w,b) b=b−α∂b∂J(w,b)
对于梯度下降算法,需要重复这两个更新步骤,直到算法收敛(convergence)。算法收敛,意思是到达了一个局部最小值的点,参数 w , b w,b w,b不再随着更新而发生(很大)变化。
梯度下降算法需要同时更新更新参数 w , b w,b w,b的值。在下图中,左边才是正确完成了同时更新参数 w , b w,b w,b,是正确的梯度下降算法。右边的是错误的方法。
梯度下降算法在代码中实现的方式,实际上实现起来更简单,并且是正确的完成了同时更新参数 w , b w,b w,b。
理解梯度下降
梯度下降算法需要同时更新参数 w , b w,b w,b:
w = w − α ∂ ∂ w J ( w , b ) w=w-α\frac{ \partial }{ \partial w }J(w,b) w=w−α∂w∂J(w,b)
b = b − α ∂ ∂ b J ( w , b ) b=b-α\frac{ \partial }{ \partial b }J(w,b) b=b−α∂b∂J(w,b)
其中 α α α是学习率(learning rate),用于控制更新模型参数 w , b w,b w,b的步长。
下面通过一个简单的例子理解 α α α学习率、 ∂ ∂ w J ( w , b ) \frac{ \partial }{ \partial w }J(w,b) ∂w∂J(w,b)、 ∂ ∂ b J ( w , b ) \frac{ \partial }{ \partial b }J(w,b) ∂b∂J(w,b)在做什么【都在下图中体现了】。
这个例子是简化后的线性回归模型: f w ( x ) = w x f_{w}(x)=wx fw(x)=wx,只有一个参数 w w w,其代价函数为 J ( w ) J(w) J(w),目的是通过梯度下降算法找到使代价函数 J ( w ) J(w) J(w)最小的参数 w w w的值。
这时根据梯度下降算法更新 w w w的值:
w = w − α ∂ ∂ w J ( w ) w=w-α\frac{ \partial }{ \partial w }J(w) w=w−α∂w∂J(w)
过程看下图:
学习率α
学习率α的选择将对实现梯度下降的效率产生巨大影响。
下面仍然以简化后的线性回归模型 f w ( x ) = w x f_{w}(x)=wx fw(x)=wx为例,说明太小或太大学习率α对实现梯度下降的效率产生的影响:
在前面提到过 w w w的初始值可以随意选取,那么如果 w w w的初始值就是局部最小值呢?或者经过梯度下降算法处理后, w w w的值变成局部最小值,那么此时再对 w w w作梯度下降, w w w的值又该如何变化?——这种情况见下图分析:
梯度下降算法即使使用固定的学习率α,也可以到达(局部)最小值。举个例子帮助理解(仍然基于简化后的线性回归模型):
梯度下降算法可以用来最小化任何代价函数J,而不仅仅是用于线性回归模型的平方误差代价函数。
用于线性回归的梯度下降
下面讨论完整的线性回归模型: f w , b ( x ) = w x + b f_{w,b}(x)=wx+b fw,b(x)=wx+b,其中 f w , b ( x ) f_{w,b}(x) fw,b(x)是 x x x的函数。
与之对应的代价函数: J ( w , b ) = 1 2 m ∑ i = 1 m ( y ^ ( i ) − y ( i ) ) 2 = 1 2 m ∑ i = 1 m ( f w , b ( x ( i ) ) − y ( i ) ) 2 J(w,b)=\frac{1}{2m}\sum_{i=1}^m {(\hat{y}^{(i)}-{y}^{(i)})}^2=\frac{1}{2m}\sum_{i=1}^m {(f_{w,b}({x}^{(i)})-{y}^{(i)})}^2 J(w,b)=2m1i=1∑m(y^(i)−y(i))2=2m1i=1∑m(fw,b(x(i))−y(i))2其中 J ( w , b ) J(w,b) J(w,b)是 w , b w,b w,b的函数。
以及对应的梯度下降算法:
w = w − α ∂ ∂ w J ( w , b ) w=w-α\frac{ \partial }{ \partial w }J(w,b) w=w−α∂w∂J(w,b)
b = b − α ∂ ∂ b J ( w , b ) b=b-α\frac{ \partial }{ \partial b }J(w,b) b=b−α∂b∂J(w,b)
根据微积分可知:
∂ ∂ w J ( w , b ) = 1 m ∑ i = 1 m ( f w , b ( x ( i ) ) − y ( i ) ) x ( i ) \frac{ \partial }{ \partial w }J(w,b)=\frac{1}{m}\sum_{i=1}^m {(f_{w,b}({x}^{(i)})-{y}^{(i)})}x^{(i)} ∂w∂J(w,b)=m1i=1∑m(fw,b(x(i))−y(i))x(i)
∂ ∂ b J ( w , b ) = 1 m ∑ i = 1 m ( f w , b ( x ( i ) ) − y ( i ) ) \frac{ \partial }{ \partial b }J(w,b)=\frac{1}{m}\sum_{i=1}^m {(f_{w,b}({x}^{(i)})-{y}^{(i)})} ∂b∂J(w,b)=m1i=1∑m(fw,b(x(i))−y(i))
推导过程如下图:
可以看到原本代价函数的分母中有一个2
,而在偏导数中,由于求导会将这个2
抵消,使计算看起来更简洁。这就解释了在【代价函数公式】部分提到的 注:额外除以2只是为了使后面的计算看起来更简洁。
现在可以把
∂ ∂ w J ( w , b ) = 1 m ∑ i = 1 m ( f w , b ( x ( i ) ) − y ( i ) ) x ( i ) \frac{ \partial }{ \partial w }J(w,b)=\frac{1}{m}\sum_{i=1}^m {(f_{w,b}({x}^{(i)})-{y}^{(i)})}x^{(i)} ∂w∂J(w,b)=m1i=1∑