Machine Learning笔记——单变量线性回归
学习者:阳光罗诺
来源:吴恩达 机器学习课程
在监督学习的问题中,预测房价属于一个例子
对于一个监督学习,就需要有相对应的训练数据集,
训练集(Training Set):主要用于建立模型
在机器学习中,样本一般分成独立的三部分训练集(train set),验证集(validation set)和测试集(test set)。
训练集用来建立并且估计模型;
验证集用来确定网络结构或者控制模型复杂程度的参数;
测试集则检验最终选择最优的模型的性能如何。
代价函数(Cost function)
对于θ_0 和θ_1取不同的值时,对应得到的线性回归函数也随之变化。
代价函数的定义:
代价函数有叫做平方误差函数或损失函数或者是成本函数。将一个或多个变量的事件阈值映射到直观地表示与该事件。 一个优化问题试图最小化损失函数。
目标函数是损失函数或其负值,在这种情况下它将被最大化。
代价函数是解决回归问题最常用的处理手段。
代价函数的常见形式:
在线性回归中,最常用的是均方误差(Mean squared error),具体形式为:
m:训练样本的个数;
hθ(x):用参数θ和x预测出来的y值;
y:原训练样本中的y值,也就是标准答案
上角标(i):第i个样本
完整的假设函数h和成本函数J,保留假设函数的所有参数θ_0,θ_1
随着参数的不同,得到和数据相符的直线大致如下:
为了简化这个假设函数,然后得到一个经过原点(0,0)的函数:
当θ_1=1的时候,得到如下的情况:
但是当θ_1=0.5的时候,得到的情况是:
当θ_1=0时,相对应的情况:
当θ_1的值开始是负数的时候,此时的误差就显得非常的大。但是经过不断进行数据的计算,我们可以得到地大致函数图像如下:
对θ_1的值,每一个θ_1的值都对应着一个不同的假设函数。得到的数据对应的代价函数也是随之而变化。
对于学习优化算法,我们最终的目标,就是找到最优的处理算法。也是线性回归的目标函数。
等高线图
针对于假设函数和代价函数问题,我们会继续进行优化问题,此时我们需要对两个参数θ_0和θ_1同时进行赋值,然后进行优化问题的处理:
当θ_1进行赋值的时候,我们得到的代价函数图形类似一个抛物线:
但是当同时对θ_1和θ_0都进行了赋值,如上图θ_0=50和θ_1=0.05时,我们得到的函数图形如图所示:
但是为了很多问题,在此处不适用三维图形,我们此时就使用等高线图
总的来说。等高线图,类似于地里中的那些图形,一座大山,地面测量大山各点的海拔高度,映射到平面上。高度相同的用线连接起来,就会形成图中的等高线图。也有一点类似于树的年轮。当然了,在等高线图中,越靠近中心,海拔自然是越高。
梯度下降法
除了以上的方法之外,我们依然可以使用梯度下降法将代价函数J最小化。
梯度下降是比较常用的最小化代价函数J的算法.
梯度下降算法(Gradient Descent Optimization)是神经网络模型训练最常用的优化算法。对于深度学习模型,基本都是采用梯度下降算法来进行优化训练的。梯度下降算法背后的原理:目标函数T(θ)关于参数θ的梯度将是目标函数上升最快的方向。
要使用梯度下降法找到一个函数的局部极小值,必须向函数上当前点对应梯度(或者是近似梯度)的反方向的规定步长距离点进行迭代搜索。
在梯度下降法中,我们要做的就是不停地改变θ_1和θ_0的值,通过改变使得J变小,直到找到J的最小值或者是局部最小值。
就像一座大山,我们走向山底,有很多方式,但是往往会选择最优的路线方式。
梯度下降法的定义:
:= 表示赋值
α 是一个数字,被称为学习速率,在梯度下降中,它控制下降的步子的大小。也是下降速率。
(∂/∂Θj)J(Θ0,Θ1) 是一个微分项
对于该定义式,我们需要同时更新θ_1和θ_0的值。
用一个简单的例子,例如最小化的函数只有一个参数的情形,所以假如有一个代价函数J,只有一个参数θ_1,θ_1是一个实数,所以可以画出一维的曲线(类似抛物线)
小红点处的切线的斜率就是导数值,随着小红点逐渐收敛至最低点,切线斜率逐渐降低,移动的步子大小也会越来越小。
α的大小也是会有一定的影响,下面两个图分别大致分析了α的值造成的影响。
如果α的值过大,他会导致无法收敛甚至发散。
假设将θ_1初始化在局部最低点,如图所示:
局部最优点的导数等于0,因为导数是切线的斜率,此时的直线的斜率为0,所以导数项d(dθ_1 ) /T(θ_1)
等于0。
梯度下降和代价函数的结合,以及推导,可以得出以下式子:
计算推导梯度下降算法的过程:
最后不断简化得到线性回归算法:
对于线性回归的代价函数,总是会出现一个弓状函数(凸函数)
图中的函数不存在什么局部最优,而是存在只有一个全局最优。
当我们计算这种类型的代价函数的梯度下降时,只要使用线性回归,它总是会收敛到全局最优,因为它自己本身没用其他的局部最优解。
Batch梯度下降算法
意味着每一步的梯度下降,都遍历了整个训练集的样本,所以在梯度下降中,当计算偏导数的时候,总是计算总和。
每次使用全量的训练集样本来更新模型参数,即给定一个步长,然后对所有的样本的梯度的和进行迭代:
梯度下降算法最终得到的是局部极小值。而线性回归的损失函数为凸函数,有且只有一个局部最小,则这个局部最小一定是全局最小。所以线性回归中使用批量梯度下降算法,一定可以找到一个全局最优解。