最近在Coursera上看吴大神的Machine Learning,感觉讲的真的很棒。所以觉得应该要好好做做笔记,一方面是加强自己对ML中一些方法的掌握程度和理解,另一方面也能方便自己或者同样爱好ML的同学。
线性回归(Linear Regression)
线性回归(Linear Regression)应该是机器学习中最基本的东西了。所谓回归,想必大家在高中时期的课程里面就接触过,给定一系列离散的点(x0,y0),求一条直线 f(x)=ax+b 以使得最小。在machine learning 中,我们要做的就是求得最优的 a 和 b,以此达到对未来数据能够有一个足够好的预测。
一、假设函数(Hypothesis Function)
首先,我们需要一个函数来拟合我们得到的一些数据,我们不妨把这个函数称为假设函数(hypothesis function)。这里是线性回归,所以可以把假设函数设为 hθ(x)=θ0+θ1x 。现在来举一个例子,假设我们有5组房子的面积(area)和价格(prices)的数据如下,然后我们要求出一个函数,用来预测未来的房价:
Area(m2) |
Prices(dollar) |
40 |
100,000 |
50 |
120,000 |
60 |
145,000 |
70 |
200,000 |
80 |
222,100 |
我们可以得到其图像如下:
假设我们随意地将
θ0 和
θ1 分别设为0和1,那么我们的假设函数就为
hθ(x)=0+1?x。如果将面积
x 代入到此式子中,得到的
y 值将严重偏离其对应的价格。所以0和1不是一个好的取法。那我们到底该怎么获得最优的
θ0 和
θ1 使得误差最小呢?这里我们就要引入一个函数
J(θ0,θ1)=12n∑i=0n(hθ(xi)?yi)2
作为误差函数。
二、误差函数(Cost Function)
我们选择关于 θ0 和 θ1 的函数 J(θ0,θ1)=12n∑ni=0(hθ(xi)?yi)2 作为误差函数。后面的求和部分与求方差无异,前面的系数 12n 本应该是 1n,但是为了方便后面的求导,所以写成 12n ,但是这并不会影响我们用这个函数来度量误差。那么到底怎么求得最合适的 θ0 和 θ1 呢?下面将引入一种叫做梯度下降(Gradient Decent)的方法。稍后我们再来证明为什么要选择上面这个函数作为误差函数以及这个函数的正确性。
三、梯度下降(Gradient Decent)
首先来看看什么是梯度下降。梯度下降嘛,顾名思义,梯度就是步长或者间隔的意思,下降当然就是往下降了。先来看一张图片:
说明:本张图片版权属于Stanford机器学习课程,转载请注明出处
上面这张图是一个二元函数
J(θ0,θ1)的图像,先不论其方法细节,我们要做的就是在这张图上找到那个使误差函数
J(θ0,θ1) 最小的点(
注意,上面这幅函数图像并不是之前的我们所说的误差函数J(θ0,θ1)=12n∑ni=0(hθ(xi)?yi)2的图像,这里只是举个例子而已,真正的误差函数图像会在文章最后给出),而我们使用的方法就是梯度下降法。其大概步骤就是:
1. 随意给定一组点
(θ0,θ1)的值,比如上图中的左边那个红色的“山顶”上的那个起始点;
2. 在该点上转一圈,选择最陡峭的那个方向,然后向那个方向迈出一步。
3. 得到新的点,然后继续重复第二步,直到到达最低的地方。
那我们先来说说梯度下降法到底是怎么得到最佳的(θ0,θ1)的。首先给出一个收敛公式:
θj=θj?α??θjJ(θ0,θ1)
其中 α 称为学习速率;j=0,1;??θjJ(θ0,θ1) 表示函数J(θ0,θ1)=12n∑ni=0(hθ(xi)?yi)2 在点 (θ0,θ1) 处的偏导数。只要我们取一个合适的 α 然后重复地对这个式子进行运算,直到 θj 不再变化,或者说一阶偏导数 ??θjJ(θ0,θ1) 为零时,我们就得到了最佳的 θj。
可能看到这里,还是一脸懵逼。那我们再来形象地讨论一下这个部分。对于函数J(θ0,θ1),当我们求它的关于θj 的偏导数的时候,其实就是在求一元函数的斜率,我们来看下面这张二次函数的图像:
如果我们选取合适的
α (
α 应该是一个比较小的数),根据上面的收敛公式,我们就会使
θj 逐渐靠近斜率为
0 的位置。需要注意的是,不管我们的起始点选在最低点的左边还是右边,因为斜率在左边为负数,在右边为正数,所以收敛公式都会向中间点靠近,但是前提是
α 的选取要合适:
但是如果
α 选取得太大,即便偏导数很小,都可能会造成
α???θjJ(θ0,θ1) 太大,而执行一次减法就使得
θj 越过最低点,以至于
θj 逐渐偏离最佳的位置:
所以分别对 θ0 和 θ1 求偏导数后,对于θ0有如下公式:
(求偏导数:把最开始的那个假设函数hθ(x)=θ0+θ1?x 代入上面的收敛函数,注意不是对x,y 求偏导)
θ0=θ0?α?1n∑i=1n(hθ(xi)?yi)
对于θ1有如下公式:
θ1=θ1?α?1n∑i=1n(hθ(xi)?yi)?xi
其中
n 是训练集
{(xi,yi)|i=1,2,3,...,n} 的数量,
α 称为学习速率。另外需要注意的是,
θ0 和
θ1要分别求出来之后,再进行下一轮的收敛:
while(not convergent){
calculate theta0;// or you can say update theta0
calculate theta1; // or you can say update theta1
}
可以想象,当 θ0 和 θ1 都达到最佳值的时候,我们的二元误差函数
J(θ0,θ1)=12n∑i=0n(hθ(xi)?yi)2
就有最小值,也就说明假设函数
hθ(x)=θ0+θ1?x 对未来数据的预测可能会尽量的准确。
这就是我们在线性回归(linear regression)中用到的梯度下降(gradient decent)法。
四、以上方法的正确性
1.梯度下降就不再赘述了。
2.为什么我们选取的误差函数假设函数 Jθ(θ0,θ1) 是正确的呢?
我们来求一求函数 J(θ0,θ1)=12n∑ni=0(hθ(xi)?yi)2 的二阶偏导数就知道为什么了。
关于θ0的二阶偏导数:
?2?θ20J(θ0,θ1)=??θ01n∑i=1n(θ0+θ1?xi?yi)=n>0
所以对于
θ0 ,其对应的一元函数的斜率的变化率是一直不变的,即其函数的图像是严格的抛物线。
关于
θ1的二阶偏导数:
?2?θ21J(θ0,θ1)=??θ11n∑i=1n(θ0+θ1?xi?yi)?xi=1n∑i=1nx2i>0
所以对于
θ1 ,其对应的一元函数的斜率的变化率同样是一直不变的,即其函数的图像是严格的抛物线。
以上两个一阶偏导数的变化率均为正数,所以可以想象函数
J(θ0,θ1)的图形是一个严格的凹形图像:
说明:本张图片版权属于Stanford机器学习课程,转载请注明出处
所以函数
J(θ0,θ1)有且只有一个最低点,也就是误差最小点。
综上,通过梯度下降法,就可以求得最佳的
θ0,θ1 使得 误差函数
J(θ0,θ1) 尽可能地小,从而使得假设函数
hθ(x)=θ0+θ1?x 更加的准确。当然我们预测出来的数据也会更加准确。
上面就是单变量线性回归的大概内容,希望能帮助到大家。
如有错误,期望您能纠正,留言或者是e-mail:artprog@163.com