Linear Regression with Multiple Variables 多变量线性回归
Multivariate Linear Regression多元线性回归
Multiple Features多元特征值
之前说到房价问题,只有一个输入x为房屋面积,是个标量,对应一个输出y,那么对于有多个特征值的多元线性回归问题,假设函数应该是
那么容易推出我们的假设函数就是hθ(x) = θTx,注意这里的θ和x都是n+1维的向量,不再是标量。
Gradient Descent for Multiple Variables多变量的梯度下降算法
我们在计算的时候都把θ和x看成一个整体,这个整体用向量表示,而不要分开表示成θ0...θn,如下
那么梯度下降更新算法如下,其实这个和一元的公式是等价的,因为x0 = 1;
Gradient Descent in Practice I - Feature Scaling梯度下降实用技巧 - 特征缩放
特征缩放 (feature scaling) 如果你有一个机器学习问题 这个问题有多个特征 如果你能确保这些特征 都处在一个相近的范围 这样梯度下降法就能更快地收敛
如图所示,我们以只有两个特征值的情况来举例,当特征值的取值范围差距很大的时候,代价函数的轮廓图就像左边,呈椭圆,而如果你用这个代价函数 来运行梯度下降的话 你最终可能 需要花很长一段时间 并且下降的过程会反复来回振荡 然后经过很长时间 才收敛到全局最小值,但是如果你将特征值的范围缩放到相同的范围,比如都在-1到1之间,那么最终得到的轮廓图就像右边,比较圆,梯度下降的速度变得更快 收敛所需的循环次数更少
在特征缩放的过程中,我们不用对x0进行缩放,因为它始终等于1,已经在这个范围了。
我们有以下方法来进行特征缩放
均值归一化:如果你有一个特征 xi 你就用 xi - μi 来替换 通过这样做 让你的特征值 具有为0的平均值,具有0均值后还要缩放,所以我们的最终的公式就是:(xi-平均值)/最大值;
一般规律:可以用 (xi - μi)/Si 来替换原来的特征 xi 其中定义 μi的意思是特征 xi 的平均值 而 Si 是 该特征值的范围 即最大值减去最小值 也可以把 Si设为变量的标准差 但其实用最大值减最小值就可以了
Gradient Descent in Practice II - Learning Rate梯度下降实用技巧 - 学习速率
另外 也可以 进行一些自动的收敛测试 也就是说用一种算法 来告诉你梯度下降算法 是否已经收敛 如果代价函数 J(θ) 的下降小于 一个很小的值 ε 那么就认为已经收敛 比如可以选择 1e-3 但通常要选择一个合适的阈值 ε 是相当困难的 因此 为了检查 梯度下降算法是否收敛 实际上还是 通过看 左边的这条曲线图 而不是依靠自动收敛测试
此外 这种曲线图 也可以 在算法没有正常工作时 提前警告你 例如第一个曲线表示 梯度下降算法没有正常工作 你应该使用较小的学习率 α 第二个曲线图通常同样是需要选择较小 α 值
只要学习率足够小 那么每次迭代之后 代价函数 J(θ) 都会下降 因此如果代价函数没有下降 那可能以为着学习率过大 这时你就应该尝试一个较小的学习率 当然 如果学习率 α 太小 梯度下降算法 的收敛将会很缓慢
Features and Polynomial Regression特征和多项式回归
1.选择了合适的特征后 得到的学习算法往往是非常有效的
例如预测房价的例子,我们有两个特征值,x1是房子的邻街宽度,x2时房子的深度,那么我们在线性回归时,我们就可以自己创造新的特征x=邻街宽度x房子的深度,也就是房子的占地面积作为特征值,而不直接使用之前的两个特征值。
2.多项式回归 它使得你们能够使用线性回归的方法来拟合非常复杂的函数 甚至是非线性函数
以上是住房价格的数据集 为了拟合它 你可以用一个二次模型(蓝色线条) 但是 一个二次函数最终 会降回来 而我们并不认为 房子的价格在高到一定程度后 会下降回来 因此 也许我们会 选择一个不同的多项式模型 并转而选择使用一个 三次函数(绿色线条) 我们用它进行拟合 对这个数据集拟合得更好 因为它不会在最后下降回来
如何将这些多元模型与我们的数据集进行拟合? 使用多元线性回归的方法 我们可以 通过将我们的算法做一个非常简单的修改来实现它
线性回归 ħθ(x) = θ0 +θ1×x1 + θ2×x2 + θ3×x3 而三次模型ħθ(x) = θ0 +θ1×x + θ2×x^2 + θ3×x^3 通过比较我们发现我们值需要做一个非常简单的修改就能实现 也就是x1=x=房子的面积,即ħθ(x) = θ0 +θ1×(size) + θ2×(size)^2 + θ3×(size)^3 然后再应用线性回归的方法 我就可以拟合 这个三次模型 并最终 将一个三次函数拟合到我的数据上
最后我们要注意特征的归一化
Computing Parameters Analytically计算参数分析
Normal Equation正规方程
正规方程 (Normal Equation) 对于某些线性回归问题 求解参数 θ 的最优值比梯度下降更好
什么是正规方程?
我们知道通过求导为0就能够找到代价函数的极值点,而线性回归问题的代价函数是个凸函数,那么它只有一个极值点,也就是我们要求的最优点,也就是我们只要求出导数为0的点就OK了。
那么这里有个问题,就是求导的过程很复杂,下面就来解决这个问题
以上就是计算公式,X是数据集特征向量x(n)构成的矩阵,y是数据集y(n)构成的向量,关于这个公式的推导,参考维基百科Matrix Calculus 可见使用matlab或者Octave通过简单的矩阵运算就能计算出我们的θ值
注意:如果你使用正规方程法 那么就不需要归一化特征变量
何时用正规方程,何时用梯度下降,它们的比较如下:
| 优点 | 缺点 | |
| 正规方程 | 不用选择学习速率 α,只需计算一次,无需特征值缩放 | 特征变量的数目超过1w时,计算时间长,不适用于分类算法 像逻辑回归算法 |
| 梯度下降 | 特征变量的数目很大时也能正常运行,适用于分类算法 像逻辑回归算法 | 迭代很多次,选择学习速率 α,特征值缩放 |
Normal Equation Noninvertibility
上一节说到用正规方程就能计算出θ值,但是需要用到逆矩阵,我们知道不是所有的矩阵都是可逆的,但是实际中几乎不会出现不可逆的情况,除非你的特征值线性相关或者重复,或者训练样本数小于特征值的数目,即使遇到不可逆的情况,我们也可以通过pinv() 函数计算求伪逆,因此不必过多关注不可逆的问题。
参考资料
https://www.coursera.org/learn/machine-learning/