吴恩达-机器学习公开课 学习笔记 Week2-1 Linear Regression with Multiple Variables
2-1 Linear Regression with Multiple Variables 课程内容
此文为Week2 中Linear Algebra Review的部分。此部分为可选内容。
2-1-1 Environment Setup Instructions
作业要求使用Octave或者MATLAB完成。
使用在线MATLAB,无需安装:https://matlab.mathworks.com/
2-1-2 Multivariate Linear Regression
Multiple Features
多变量或多特征量的情况:
假设函数:
将函数改写为参数向量θ以及特征向量X的内积,让我们可以以这种紧凑的形式写出假设。
这就是多特征量情况下的假设函数,就是所谓的多元线性回归。
Gradient Descent for Multiple Variables
如何找到满足这一假设的参数,尤其是如何使用梯度下降法来解决多特征的线性回归问题。
将 n+1个θ参数想象成一个n+1维的向量θ。
更新后的梯度下降算法:
Gradient Descent in Practice I - Feature Scaling
如果你有一个机器学习问题,这个问题有多个特征。如果你能确保这些特征都处在一个相近的范围,我的意思是确保不同特征的取值在相近的范围内。这样梯度下降法就能更快地收敛。
eg. x1是房屋面积大小,取值在0到2000之间。x2 是卧室的数量,取值范围在1到5之间 。
轮廓图:(忽略θ0)
如果你用这个代价函数来运行梯度下降的话,你要得到梯度值最终可能需要花很长一段时间,并且可能会来回波动。然后会经过很长时间最终才收敛到全局最小值。
在这样的情况下 一种有效的方法是进行特征缩放(feature scaling)。
具体来说,把特征 x 定义为房子的面积大小除以2000的话,并且把 x2 定义为卧室的数量除以5。那么这样的话,表示代价函数 J(θ) 的轮廓图的形状就会变得偏移没那么严重。
因此,通过特征缩放,通过"消耗掉"这些值的范围。在这个例子中,我们最终得到的两个特征 x1 和 x2 都在0和1之间。这样你得到的梯度下降算法就会更快地收敛。
更一般地,我们执行特征缩放时,我们通常的目的是:将特征的取值约束到 -1 到 +1 的范围内。
有时候我们也会进行一个 称为均值归一化的工作(mean normalization)。
特征缩放&归一化
- 特征缩放是将输入值除以输入变量的范围(即最大值减去最小值),得到的新范围只有1。
- 归一化涉及到从输入变量的值中减去输入变量的平均值,从而得到一个只有0的输入变量的新平均值。
要实现这两种技术,请按如下公式调整输入值:
- μi :所有特征值i的平均值
- si :max-min 或者 标准差
eg.房价范围100~2000,均值1000
Gradient Descent in Practice II - Learning Rate
梯度下降算法所做的事情,就是为你找到 一个 θ 值,并希望它能够最小化代价函数 J(θ)。
如果梯度下降算法正常工作,那么每一步迭代之后 J(θ) 都应该下降。
看这条曲线可以帮助你判断梯度下降算法是否已经收敛。
对于每一个特定的问题 梯度下降算法所需的迭代次数可以相差很大。实际上,我们很难提前判断。通常我们需要画出代价函数随迭代步数数增加的变化曲线,通过看这种曲线来试着判断梯度下降算法是否已经收敛。
另外,也可以进行一些自动的收敛测试,来告诉你梯度下降算法是否已经收敛。
自动收敛测试一个非常典型的例子是:如果代价函数 J(θ) 的下降小于一个很小的值 ε,那么就认为已经收敛。
总结:
- 如果α太小: 收敛速度慢。
- 如果α太大: 可能不会减少在每一个迭代,因此可能不收敛。
Features and Polynomial Regression
当选择了合适的特征后,这些算法往往是非常有效的。有时通过定义新的特征,你确实会得到一个更好的模型。
与选择特征的想法密切相关的一个概念被称为多项式回归(polynomial regression)。
eg. 你有这样一个住房价格的数据集。为了拟合它,可能会有多个不同的模型供选择。
我们探讨了多项式回归,也就是如何将一个多项式,如一个二次函数或一个三次函数拟合到你的数据上。除了这个方面,我们还讨论了在使用特征时的选择性。
因此,你可以使用一个算法观察给出的数据,并自动为你选择到底应该选择 一个二次函数或者一个三次函数还是别的函数。
2-1-3 Computing Parameters Analytically
Normal Equation
标准方程法提供了一种求 θ 的解析解法,可以***直接一次性***求解θ的最优值。
假设 θ 只是一个标量,或者说 θ 只有一行,它是一个数字不是向量的时候我们对J求导,将导数置零时就可得到最小值。
θ不是一个实数的情况,是一个n+1维的参数向量时,对所有θi求偏导。这个结果可能很复杂,实际上不是遍历所有的偏微分。
eg. 我有 m=4 个训练样本。
首先,加上一列对应额外特征变量x0(值均为1)。构建一个矩阵X包含训练样本所有特征变量。将预测值构建一个向量y。最后 如果你用矩阵 X 和向量 y 来计算这个 θ,这样就得到能够使得代价函数最小化的 θ。
通常来说,假如我们有 m 个训练样本 x(1) y(1) 直到 x(m) y(m), n 个特征变量。所以每一个训练样本 xi 可能看起来像一个 n+1 维特征向量。
我要构建矩阵 X 的方法也被称为设计矩阵。这样矩阵 X 就是一个 m*(n+1) 维矩阵 这样矩阵 X 就是一个 m*(n+1) 维矩阵。
当我们使用标准方程时,我们不需要进行特征归一化。
标准方程与梯度下降对比
只要特征变量的数目并不大,标准方程是一个很好的计算参数 θ 的替代方法。具体地说 只要特征变量数量小于一万 我通常使用标准方程法,而不使用梯度下降法。
对于那些更复杂的学习算法,我们将不得不仍然使用梯度下降法,可以用在有大量特征变量的线性回归问题。
Normal Equation Noninvertibility
当矩阵XTX不可逆?
通常有两种最常见的原因:
- 在你的学习问题中你有冗余特征,即两个特征密切相关(即它们是线性相关的)。
- 你想用大量的特征值 (e.g. m≤ n)。在这种情况下,删除一些特性或使用“正则化”
上述问题的解决方案包括删除与另一个特性线性相关的特性,或者删除一个或多个特性(当特性太多时)。
在Octave里,有两个函数可以求解矩阵的逆,一个被称为pinv() ,另一个是inv() 。这两者之间的差异是些许计算过程上的,一个是所谓的伪逆,另一个被称为逆。用pinv() 函数可以展现数学上的过程,这将计算出θ的值,即便矩阵X’X是不可逆的。
2-1-4 测验 Linear Regression with Multiple Variables
课程链接
https://www.coursera.org/learn/machine-learning/home/week/2