最近在Coursera上看吴大神的Machine Learning,感觉讲的真的很棒。所以觉得应该要好好做做笔记,一方面是加强自己对ML中一些方法的掌握程度和理解,另一方面也能方便自己或者同样爱好ML的同学。
线性回归(Linear Regression)应该是机器学习中最基本的东西了。所谓回归,想必大家在高中时期的课程里面就接触过,给定一系列离散的点 (x0,y0) ,求一条直线 f(x)=ax+b 以使得各点与直线的距离之和最小。在machine learning 中,线性回归要做的就是求得最优的 a 和 b ,以此达到对未来数据能够有一个足够好的预测。
首先,我们需要一个函数来拟合我们得到的一些数据,我们不妨把这个函数称为假设函数(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 的函数 J(θ0,θ1)=12n∑ni=0(hθ(xi)−yi)2 作为误差函数。后面的求和部分与求方差无异,前面的系数 12n 本应该是 1n ,但是为了方便后面的求导,所以写成 12n ,但是这并不会影响我们用这个函数来度量误差。那么到底怎么求得最合适的 θ0 和 θ1 呢?下面将引入一种叫做梯度下降(Gradient Decent)的方法。稍后我们再来证明为什么要选择上面这个函数作为误差函数以及这个函数的正确性。
首先来看看什么是梯度下降。梯度下降嘛,顾名思义,梯度就是步长或者间隔的意思,下降当然就是往下降了。先来看一张图片:
那我们先来说说梯度下降法到底是怎么得到最佳的 (θ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 的偏导数的时候,其实就是在求一元函数的斜率,我们来看下面这张二次函数的图像:
所以分别对 θ0 和 θ1 求偏导数后,对于 θ0 有如下公式:
(求偏导数:把最开始的那个假设函数 hθ(x)=θ0+θ1⋅x 代入上面的收敛函数,注意不是对 x,y 求偏导)
对于 θ1 有如下公式:
while(not convergent){
calculate theta0;// or you can say update theta0
calculate theta1; // or you can say update theta1
}
可以想象,当 θ0 和 θ1 都达到最佳值的时候,我们的二元误差函数
1.梯度下降就不再赘述了。
2.为什么我们选取的误差函数假设函数 Jθ(θ0,θ1) 是正确的呢?
我们来求一求函数 J(θ0,θ1)=12n∑ni=0(hθ(xi)−yi)2 的二阶偏导数就知道为什么了。
关于 θ0 的二阶偏导数: