Coursera 机器学习(by Andrew Ng)课程学习笔记 Week 2——多元线性回归和正规方程

此系列为 Coursera 网站机器学习课程个人学习笔记(仅供参考)
课程网址:https://www.coursera.org/learn/machine-learning
参考资料:http://blog.csdn.net/SCUT_Arucee/article/details/49448111
     http://blog.csdn.net/sinat_30071459/article/details/50721565


一、多元线性回归(Multivariate Linear Regression)

1.1 多元线性回归

在之前的房价预测问题上,我们只考虑了房间面积这一个变量(特征)来预测房屋价格,但是当我们使用房屋面积x1,房间数量x2,楼层x3,使用年限x4多个变量来预测房屋价格时,问题就由单变量问题转化为多变量(特征)问题。
我们首先定义几个符号方便之后的讲解:

         n 特征的个数(此例中n=4
         x(i)i组训练数据的所有特征,每组特征可用一个列向量表示。
         x(i)ji组训练数据的第j个特征的值

此时,我们的假设函数为:hθ(x)=θ0+θ1x1+θ2x2+θ3x3+θ4x4,我们可以假设x0=1
扩展到n个变量,得到多变量线性回归一般的假设函数(hypothesis):

hθ(x)=θ0x0+θ1x1+θ2x2+θ3x3+θnxn

定义两个n+1维向量:

x=x0x1x2xnRn+1

θ=θ0θ1θ2θnRn+1

假设函数可以表示为:hθ(x)=θTx

代价函数 J(θ0,θ1,,θn)=12mmi=1(hθ(x(i))y(i))2 也可以用上面定义的向量表示:

J(θ)=12mmi=1(hθ(x(i))y(i))2

也可以写为:

J(θ)=12mmi=1((nj=0θjx(i)j)y(i))2

1.2 用梯度下降解决多元线性回归问题

同前面的相同,梯度下降更新公式为:

θ:=θjαθjJ(θ)

n个特征:(x(i)0=1

Coursera 机器学习(by Andrew Ng)课程学习笔记 Week 2——多元线性回归和正规方程

也可以表示为:

Coursera 机器学习(by Andrew Ng)课程学习笔记 Week 2——多元线性回归和正规方程

同在前面提过的一样,这里之所以会多乘一项x(i)j,是因为hθ(x)=θ0x0+θ1x1+θ2x2+θ3x3+θnxn在对θj求偏导时,会得到θj前面的系数x(i)j


1.3 特征缩放(Feature Scaling)

处理多变量问题时,如果使不同的变量取值都在相似的范围内,那么梯度下降收敛的速度会加快。

下面我们将举例说明为什么以及如何处理。

我们假设上述房价问题中房屋面积大小x1取值范围为02000,房间数量x2取值为15,如果我们画出J(θ)的轮廓图(contours)会发现x1x2取值差别很大,与θ2相比,θ1变化会很缓慢,画出来的轮廓图(contours)会很高很细。如下图:

Coursera 机器学习(by Andrew Ng)课程学习笔记 Week 2——多元线性回归和正规方程

在这种情况下,算法很难找到一条捷径快速找到最优解。为了解决这个问题,我们需要进行特征缩放(feature scaling),将特征变量值除以其可以取到的最大值:

x1=2000
x2=5

这样可确保让不同特征变量的取值在相近的范围内(具有可比性),轮廓图变得更圆,梯度下降算法收敛更快。
进行特征缩放时,通常让每一个特征取值大概在1xi1的范围,因为x0总是等于1,它也满足这个范围。但这里的范围界限11也不是绝对的,只要范围和此范围接近即可,例如0.50.5,但是最好不要取过大(100),或过小(0.0001)。

均值归一化(mean normalization)
除了特征缩放(feature scaling),有时还可以进行均值归一化(mean normalization),使特征值的均值近似于0。
即:

xi:=xiμisi

μi是训练数据集中xi的平均值,sixi的取值范围(max(xi)min(xi)),或者sixi的标准差。(x0不进行上述操作)。

均值归一化不需要太精确(即到底取标准差还是取值范围或者纠结于取某个固定值),其目的只是为了让梯度下降算法收敛速度更快。


1.4 梯度下降的两个问题

梯度下降有两个常见的问题:

  • 如何确定梯度下降是正常工作的
  • 如何选择学习率

Debugging gradient descent
对于梯度下降,我们的目的是minθJ(θ)。因此,我们可以在梯度下降算法运行的过程中,画出J(θ)随迭代次数增加而变化的曲线图。正常情况下,每一次迭代后,代价函数J(θ)都减小了。如下图,若J(θ)在一定的迭代次数后趋于平坦了,则认为梯度下降收敛了。

Coursera 机器学习(by Andrew Ng)课程学习笔记 Week 2——多元线性回归和正规方程

在这里,我想先区分一下几个在后面的学习中容易混乱的概念:

batchsize: 批大小,在深度学习中,一般采用SGD训练,即每次训练在训练集中取batchsize个样本训练;
iteration: 1个iteration等于使用batchsize个样本训练一次;
epoch: 1个epoch等于使用训练集中的全部样本训练一次;

需要注意的是,对于不同的问题,梯度下降收敛所需的迭代次数也不同。我们很难确定地说出在第几次迭代算法收敛,因此,我们常常需要J(θ)随迭代次数变化的曲线图帮忙判断。

自动收敛测试(Automatic convergence test)
除了可以根据如上所述的J(θ)随迭代次数变化曲线判断是否收敛外,还可以进行自动收敛测试,即给定一个合适的较小值ε,例如103,如果在一次迭代后J(θ)减小到小于ε,则认为梯度下降收敛了。
如果选择的学习率α足够小,那么每一次迭代,J(θ)都会减小。

但这里的ε怎样选取合适并不好定一个规则,故通过判断曲线图是否平坦检测算法是否收敛可能更好。

同时,J(θ)曲线图可以在梯度下降没有正常工作的时候给出我们警告:

Coursera 机器学习(by Andrew Ng)课程学习笔记 Week 2——多元线性回归和正规方程

如上图,如果J(θ)曲线图出现左上现象,是因为学习率α太大,每次迭代后J(θ)都冲过了最小值,反而变得更大(如右侧所示),这提示我们要用更小的α

如果J(θ)曲线图出现左下现象,也是因为学习率α较大,导致J(θ)可能不会每次迭代都减小,也提示要用更小的α

总结:

  • α太小,则收敛太慢;
  • α太大,则J(θ)可能不会每次迭代都减小,可能无法收敛。

实际上,应该尝试一系列的α值(例如:,0.001,0.003,0.01,0.03,0.1,0.3,1,),作出J(θ)随迭代次数变化的曲线,找到一个可以使梯度下降较快收敛的学习率α的值。


1.5 特征选择与多项式回归

特征选择
我们现在已经了解了多变量线性回归,接下来会了解到如何选择特征和如何得到不同的算法。当我们选择了合适的特征,算法会变得非常有效。

仍然以房价问题为例,假设房价受街道临宽(frontage)和纵向深度(depth)共同影响,则假设函数为:

hθ(x)=θ0+θ1×frontage+θ2×depth

实际上,我们用房屋的面积来预测房价更合适,因此我们可以定义新的特征:x=frontage×depth,线性回归假设函数为:hθ(x)=θ0+θ1×x,有时候通过新的特征,会得到一个更好的模型。

多项式回归(Polynomial Regression)
多项式回归可以帮助我们利用线性回归的方法拟合非常复杂的函数,甚至是非线性函数。

假设房价只与房屋面积大小有关,我们得到的数据集如下图所示:

Coursera 机器学习(by Andrew Ng)课程学习笔记 Week 2——多元线性回归和正规方程

我们可以有很多模型可供选择来拟合这些数据。我们可以看出,直线(线性回归)无法很好地拟合这些数据,所以,我们可以如下图右上的二次函数来拟合,但二次函数上升到顶点会下降(如下图蓝线所示),而我们不认为房价会随面积的增加而降低,所以选择右下的三次函数来拟合可能更为合适(如下图绿线所示)。

Coursera 机器学习(by Andrew Ng)课程学习笔记 Week 2——多元线性回归和正规方程

此时,

hθ(x)=θ0+θ1x+θ2x2+θ3x3

联想到之前的多变量线性回归:

hθ(x)=θ0x0+θ1x1+θ2x2+θ3x3

我们可以通过设置特征变量:(size=x

x1=(size)
x2=(size)2
x3=(size)3

将多项式回归和多变量线性回归联系起来。

需要注意的是,如果房屋的大小取值范围是:01000,我们新设置的特征变量取值范围就变成了:

x01000
x2=0106
x3=0109

不同的特征变量取值范围差异会变得非常大,这时,我们就需要进行前面所说的归一化过程,才能将这些变量的值变得具有可比性。

在上述例子中,除了选择三次函数模型,我们还有其他合理的选择,例如平方根函数:

hθ(x)=θ0+θ1x1+θ2x1

只要能够通过设计不同的特征,取得更好的拟合效果就行。在之后的学习中我们会介绍一些算法可以帮助你自动选择合理有效的特征。


二、正规方程(Normal Equation)

2.1 正规方程(Normal Equation)

在之前所讲的梯度下降算法中,我们通过多次迭代来计算梯度下降,而正规方程提供了一种可以一次性求解最优θ值的解析方法。

首先我们回忆一下微积分是怎样处理最小值问题 minθJ(θ) 的:

1、θR,假设J(θ)=aθ2+bθ+c,要取得J(θ)的最小值,

ddθJ(θ)=0,解出θ的值

2、θRn+1J(θ)=12mmi=1(hθ(x(i))y(i))2,要取得最小值,对每一个参数θj

θjJ(θ)=0,解出θ0,θ1,,θn的值

然而,这种计算很复杂。下面我们会介绍一种新的方法。
举一个例子,如下图:

Coursera 机器学习(by Andrew Ng)课程学习笔记 Week 2——多元线性回归和正规方程

我们可以在数据前面补一列x0

Coursera 机器学习(by Andrew Ng)课程学习笔记 Week 2——多元线性回归和正规方程

接下来,我们要对特征变量x,建立一个矩阵XXRm×(n+1),这个矩阵包含了训练样本所有的特征变量。X也称为设计矩阵(design matrix)。

Coursera 机器学习(by Andrew Ng)课程学习笔记 Week 2——多元线性回归和正规方程

其中,m为样本数量,n为特征变量数,n+1是因为加了x0这一列。

y进行同样的操作,建立向量yyRm

Coursera 机器学习(by Andrew Ng)课程学习笔记 Week 2——多元线性回归和正规方程

利用刚刚创建的Xy正规方程(Normal Equation)给出求解minθJ(θ) 的公式是:

θ=(XTX)1XTy

使用正规方程法时不需要归一化特征变量。

正规方程与梯度下降的对比

Coursera 机器学习(by Andrew Ng)课程学习笔记 Week 2——多元线性回归和正规方程

对比梯度下降法和正规方程法求解θ,梯度下降法的劣势是需要选择学习率α,需要多次迭代,而正规方程法不需要。但这不意味着正规方程法就优于梯度下降,正规方程法需要计算(XTX)1,当特征变量的数目n很大时,(XTX)1(n+1)×(n+1)维矩阵,对该矩阵求逆计算量巨大,复杂度大致是O(n3),此时用梯度下降发反而更合适。

通常,n10000以下时,正规方程法会是一个很好的选择,而当n>10000时,多考虑用梯度下降法。


2.2 Normal Equation Noninvertibility

在选择正规方程法的时候,我们往往会遇到下面两个问题:

  • 如果(XTX)1不可逆怎么办?
    首先,这种情况并不多见;其次,Andrew Ng教授强调了Octave里的pinv()伪逆函数依旧可以求解。

  • 为什么(XTX)1会不可逆?
    (联系线性代数的知识)
    ① 存在多余的特征,即存在特征变量之间是线性相关的。
    针对这种情况,可删除一些特征变量直至特征变量之间没有互相线性相关的特征存在。
    ② 特征变量太多(e.g. mn)
    针对这种情况,可删除一些特征变量或使用正则化(regularization)的方法使得即使只有很小的训练集(m很小),也能找到适合很多特征的θ值,后面我们会介绍正则化(regularization)。

附:课后测试题答案

答案:C

Coursera 机器学习(by Andrew Ng)课程学习笔记 Week 2——多元线性回归和正规方程