第一章 线性回归(Linear Regression)
0. 前言
以下内容是根据coursera上《机器学习》课程所做的学习笔记,笔记中摘录了课程上的部分图片,也加入了自己的理解,为了能更好的的让自己回顾所学内容并且和大家分享,以中文形式进行阐述。
本篇文章仅供学习交流使用,需要获取更多信息还请大家登录官方网站https://www.coursera.org/。
由于是初次写博客,其中必然有很多地方考虑不到的地方,我会在之后做出修改,还请大家包涵。
1. 线性回归的模型表示
- 使用x(i)表示输入变量,也叫“输入特征”; 使用y(i)表示输出变量,也叫“目标变量”
- 一个(x(i), y(i))对称为一个训练样例
- 我们用来训练的数据集是一个训练样本列表(x(i), y(i)), i = 1,...,m
- 我们使用X,Y分别表示输入变量和输出变量的取值范围
2. 对于supervised learning的正式表述
给出一个训练数据集,我们要找到这样一个函数h:X → Y使得h称为对于输出的一个好的预判,这个函数称为hypothesis,记为hθ
3. 成本函数cost function
为了评价hypothesis方程的精确性,定义一个cost function
![](https://img.haomeiwen.com/i11867398/3e179cfd6a82cc4e.png)
我们可以看到成本函数与统计学上计算样本的方差较为类似。
4. 对cost function 的直观理解
![](https://img.haomeiwen.com/i11867398/25a74527c8922aa3.png)
![](https://img.haomeiwen.com/i11867398/2aeacf999f23c946.png)
5. 梯度下降法(gradient descent)
5.1 梯度下降法的表述
由于我们已经有了评价hypothesis方程适应数据程度的方法(cost function), 那么接下来的任务就是如何找到cost function 的最小值, 梯度下降算法是其中的一个方法.
给定一组训练数据集,我们根据采用不同的θ0, θ1得到不同的hypothesis方程hθ(θ0, θ1),并计算出了它的cost function Jθ(θ0, θ1), 综合所有的θ0, θ1绘制成下图
![](https://img.haomeiwen.com/i11867398/ecae488b66b393d5.png)
我们的目标是找到Jθ(θ0, θ1)的最小值,也就是图中的最低点。那么如何找到这个最低点呢?
假如我们站在图中的任何一点,假设是A点。梯度下降法的做法是“环顾四周,找到一个方向使得我沿着这个方向走一小步下降的距离最大”,于是我环顾四周,找到B点。 然后我重复上述过程,找到C点,然后继续重复上述过程...,最终我来到了箭头所示的最低点。总体上来看,我通过“梯度下降法”来到了图中的一个局部极小值点。
那么这个方法的正式表述是什么呢?
![](https://img.haomeiwen.com/i11867398/567377877c377952.png)
这个方法有几个需要注意的地方
1.α的含义
α称为learning rate,它表现了梯度下降的速率,也就是我们每一步的“大小”,我们会在接下来对它详细的介绍
2.":="的含义
在接下来的讨论中,我们使用符号":="表示先计算右侧的值,再将它赋给左侧(类似于C++的=)。而"="的含义是表示两侧是否相等(类似于C++的==)
3. 同时更新
由于我们要更新的θ值有很多个,在每一次梯度下降时要注意“同时更新”,即将:=右侧的值都算出来后,再同时对左侧赋值。
![](https://img.haomeiwen.com/i11867398/8229dd13a311a6a0.png)
5.2 对梯度下降法的直观理解
对于梯度下降法的某一个变量,如下图是J(θ1)关于θ1变化的曲线,这个曲线是一个凹函数,有最小值。
![](https://img.haomeiwen.com/i11867398/04e493d13ecc1676.png)
由梯度下降公式
[图片上传失败...(image-27f54c-1529201544341)])
当θ1位于右侧时,导数那一项是大于零的,我们一般将learning rate 设置成正数,因此相当于θ1减去一个正数再对θ1进行更新,结果是使θ1减小,也就是使得θ1的值向左移动。
当θ1位于左侧时,导数那一项是小于零的,因此相当于θ1减去一个负数再对θ1进行更新,结果是使θ1增大,也就是使得θ1的值向右移动。
通过这样一步一步的对参数θ进行更新,在保证learning rate α的合理取值的情况下,我们就可以最终获得使得cost function J(θ0, θ1)取得最小值的参数集合。
但是这里存在两个疑问
问题1:如何才算对α的合理取值?
这个需要通过具体的实验一步步的确定,但是我们可以肯定的是,learning rate取值过小或者取值过大都会对算法造成不利的影响。
如下图,是α取值过小的情况,我们可以看到每一步迈出的距离都特别小,造成了对于时间的大量损耗。
![](https://img.haomeiwen.com/i11867398/c5e96b291f6522ec.png)
而下图则是α 取值过大的情况,我们可以看到,假设我们一开始在A点,此时更新的结果应该是θ1向右移动,但是由于learing rate 过大,导致更新之后的θ1越过了最小值点,直接来到了B点;不幸的是,由于learning rate 还是过大,B点更新后直接越过最小值来到C点,如此这般,使得θ1 非但没有收敛,反而变得发散,这是我们不愿见到的。
![](https://img.haomeiwen.com/i11867398/477afa63a82f8f66.png)
问题2:α的值在梯度下降过程中是变化的吗?
答案是否定的,如下图,如果α的值在一个合理的范围内,导数项是随着更新过程逐渐减小并趋向于零的,也就是会逐渐趋向于最小值,而不是直接越过它
![](https://img.haomeiwen.com/i11867398/476e407fafabe030.png)
5.3 线性回归的梯度下降法(gradient descent for linear regression)
我们结合线性回归的cost function的表述
![](https://img.haomeiwen.com/i11867398/06427aa453a688b8.png)
得到线性回归的梯度下降法的规范表述
![](https://img.haomeiwen.com/i11867398/f934382cd2aaac9d.png)
这个结果可以通过简单的代入求导得到,对于没有学过微积分的同学,请自行查阅相关书籍。
由于这样的梯度下降法使用了所有的训练用例,机器学习界通常也将它称为batch gradient descent