本文主要是介绍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 组训练数据的所有特征,每组特征可用一个列向量表示。
此时,我们的假设函数为: hθ(x)=θ0+θ1x1+θ2x2+θ3x3+θ4x4 ,我们可以假设 x0=1 ,
扩展到 n 个变量,得到多变量线性回归一般的假设函数(hypothesis):
定义两个 n+1 维向量:
则假设函数可以表示为: hθ(x)=θTx 。
代价函数 J(θ0,θ1,⋯,θn)=12m∑mi=1(hθ(x(i))−y(i))2 也可以用上面定义的向量表示:
也可以写为:
1.2 用梯度下降解决多元线性回归问题
同前面的相同,梯度下降更新公式为:
有 n 个特征:(
也可以表示为:
同在前面提过的一样,这里之所以会多乘一项 x(i)j ,是因为 hθ(x)=θ0x0+θ1x1+θ2x2+θ3x3+⋯θnxn 在对 θj 求偏导时,会得到 θj 前面的系数 x(i)j 。
1.3 特征缩放(Feature Scaling)
处理多变量问题时,如果使不同的变量取值都在相似的范围内,那么梯度下降收敛的速度会加快。
下面我们将举例说明为什么以及如何处理。
我们假设上述房价问题中房屋面积大小 x1 取值范围为 0∼2000 ,房间数量 x2 取值为 1∼5 ,如果我们画出 J(θ) 的轮廓图(contours)会发现 x1 、 x2 取值差别很大,与 θ2 相比, θ1 变化会很缓慢,画出来的轮廓图(contours)会很高很细。如下图:
在这种情况下,算法很难找到一条捷径快速找到最优解。为了解决这个问题,我们需要进行特征缩放(feature scaling),将特征变量值除以其可以取到的最大值:
这样可确保让不同特征变量的取值在相近的范围内(具有可比性),轮廓图变得更圆,梯度下降算法收敛更快。
进行特征缩放时,通常让每一个特征取值大概在 −1⩽xi⩽1 的范围,因为 x0 总是等于 1 ,它也满足这个范围。但这里的范围界限
均值归一化(mean normalization)
除了特征缩放(feature scaling),有时还可以进行均值归一化(mean normalization),使特征值的均值近似于0。
即:
μi 是训练数据集中 xi 的平均值, si 是 xi 的取值范围( max(xi)−min(xi) ),或者 si 取 xi 的标准差。( x0 不进行上述操作)。
均值归一化不需要太精确(即到底取标准差还是取值范围或者纠结于取某个固定值),其目的只是为了让梯度下降算法收敛速度更快。
1.4 梯度下降的两个问题
梯度下降有两个常见的问题:
- 如何确定梯度下降是正常工作的
- 如何选择学习率
Debugging gradient descent
对于梯度下降,我们的目的是 minθJ(θ) 。因此,我们可以在梯度下降算法运行的过程中,画出 J(θ) 随迭代次数增加而变化的曲线图。正常情况下,每一次迭代后,代价函数 J(θ) 都减小了。如下图,若 J(θ) 在一定的迭代次数后趋于平坦了,则认为梯度下降收敛了。
在这里,我想先区分一下几个在后面的学习中容易混乱的概念:
batchsize: 批大小,在深度学习中,一般采用SGD训练,即每次训练在训练集中取batchsize个样本训练;
iteration: 1个iteration等于使用batchsize个样本训练一次;
epoch: 1个epoch等于使用训练集中的全部样本训练一次;
需要注意的是,对于不同的问题,梯度下降收敛所需的迭代次数也不同。我们很难确定地说出在第几次迭代算法收敛,因此,我们常常需要 J(θ) 随迭代次数变化的曲线图帮忙判断。
自动收敛测试(Automatic convergence test)
除了可以根据如上所述的 J(θ) 随迭代次数变化曲线判断是否收敛外,还可以进行自动收敛测试,即给定一个合适的较小值 ε ,例如 10−3 ,如果在一次迭代后 J(θ) 减小到小于 ε ,则认为梯度下降收敛了。
如果选择的学习率 α 足够小,那么每一次迭代, J(θ) 都会减小。
但这里的 ε 怎样选取合适并不好定一个规则,故通过判断曲线图是否平坦检测算法是否收敛可能更好。
同时, J(θ) 曲线图可以在梯度下降没有正常工作的时候给出我们警告:
如上图,如果 J(θ) 曲线图出现左上现象,是因为学习率 α 太大,每次迭代后 J(θ) 都冲过了最小值,反而变得更大(如右侧所示),这提示我们要用更小的 α 。
如果 J(θ) 曲线图出现左下现象,也是因为学习率 α 较大,导致 J(θ) 可能不会每次迭代都减小,也提示要用更小的 α 。
总结:
- 若 α 太小,则收敛太慢;
- 若 α 太大,则 J(θ) 可能不会每次迭代都减小,可能无法收敛。
实际上,应该尝试一系列的 α 值(例如: ⋯,0.001,0.003,0.01,0.03,0.1,0.3,1,⋯ ),作出 J(θ) 随迭代次数变化的曲线,找到一个可以使梯度下降较快收敛的学习率 α 的值。
1.5 特征选择与多项式回归
特征选择
我们现在已经了解了多变量线性回归,接下来会了解到如何选择特征和如何得到不同的算法。当我们选择了合适的特征,算法会变得非常有效。
仍然以房价问题为例,假设房价受街道临宽(frontage)和纵向深度(depth)共同影响,则假设函数为:
实际上,我们用房屋的面积来预测房价更合适,因此我们可以定义新的特征: x=frontage×depth ,线性回归假设函数为: hθ(x)=θ0+θ1×x ,有时候通过新的特征,会得到一个更好的模型。
多项式回归(Polynomial Regression)
多项式回归可以帮助我们利用线性回归的方法拟合非常复杂的函数,甚至是非线性函数。
假设房价只与房屋面积大小有关,我们得到的数据集如下图所示:
我们可以有很多模型可供选择来拟合这些数据。我们可以看出,直线(线性回归)无法很好地拟合这些数据,所以,我们可以如下图右上的二次函数来拟合,但二次函数上升到顶点会下降(如下图蓝线所示),而我们不认为房价会随面积的增加而降低,所以选择右下的三次函数来拟合可能更为合适(如下图绿线所示)。
此时,
联想到之前的多变量线性回归:
我们可以通过设置特征变量:( size=x )
将多项式回归和多变量线性回归联系起来。
需要注意的是,如果房屋的大小取值范围是: 0∼1000 ,我们新设置的特征变量取值范围就变成了:
不同的特征变量取值范围差异会变得非常大,这时,我们就需要进行前面所说的归一化过程,才能将这些变量的值变得具有可比性。
在上述例子中,除了选择三次函数模型,我们还有其他合理的选择,例如平方根函数:
只要能够通过设计不同的特征,取得更好的拟合效果就行。在之后的学习中我们会介绍一些算法可以帮助你自动选择合理有效的特征。
二、正规方程(Normal Equation)
2.1 正规方程(Normal Equation)
在之前所讲的梯度下降算法中,我们通过多次迭代来计算梯度下降,而正规方程提供了一种可以一次性求解最优 θ 值的解析方法。
首先我们回忆一下微积分是怎样处理最小值问题 minθJ(θ) 的:
1、 θ∈R ,假设 J(θ)=aθ2+bθ+c ,要取得 J(θ) 的最小值,
2、 θ∈Rn+1 , J(θ)=12m∑mi=1(hθ(x(i))−y(i))2 ,要取得最小值,对每一个参数 θj ,
然而,这种计算很复杂。下面我们会介绍一种新的方法。
举一个例子,如下图:
我们可以在数据前面补一列 x0 。
接下来,我们要对特征变量 x ,建立一个矩阵
其中,
对 y 进行同样的操作,建立向量
利用刚刚创建的 X 和
使用正规方程法时不需要归一化特征变量。
正规方程与梯度下降的对比
对比梯度下降法和正规方程法求解 θ ,梯度下降法的劣势是需要选择学习率 α ,需要多次迭代,而正规方程法不需要。但这不意味着正规方程法就优于梯度下降,正规方程法需要计算 (XTX)−1 ,当特征变量的数目 n 很大时,
通常, n 在
2.2 Normal Equation Noninvertibility
在选择正规方程法的时候,我们往往会遇到下面两个问题:
如果 (XTX)−1 不可逆怎么办?
首先,这种情况并不多见;其次,Andrew Ng教授强调了Octave里的pinv()伪逆函数依旧可以求解。为什么 (XTX)−1 会不可逆?
(联系线性代数的知识)
① 存在多余的特征,即存在特征变量之间是线性相关的。
针对这种情况,可删除一些特征变量直至特征变量之间没有互相线性相关的特征存在。
② 特征变量太多(e.g. m⩽n )
针对这种情况,可删除一些特征变量或使用正则化(regularization)的方法使得即使只有很小的训练集( m 很小),也能找到适合很多特征的θ 值,后面我们会介绍正则化(regularization)。
附:课后测试题答案
答案:C
这篇关于Coursera 机器学习(by Andrew Ng)课程学习笔记 Week 2——多元线性回归和正规方程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!