- 多维特征(Multiple Features)
- 特征缩放(Feature Scaling)
- 多变量梯度下降(Gradient Descent For Multiple Variables)
- 正规方程(Normal Equation)
- 小结
- References
在一元线性回归中虽然只有一个房屋面积的特征,但是相对来说我们更倾向于多元线性回归,因为要预测一个值,往往不是一个特征就能够将其描述完整的,我们需要一个能够支持多个特征的模型来完善我们的线性回归算法,就是接下来的多元线性回归(Linear Regression with Multiple Variables, Multivariate Linear Regression)。
多维特征(Multiple Features)
在多元线性回归建模之前,首先要为我们的房价数据集增加更多的特征,例如房间的楼层数、使用年份、卧室数等,这些都对房屋价格有着关键性的影响,所以我们应该把它们作为特征加入到我们的训练集中,构成一个含有多的变量的线性回归模型:
Size(feet2) | Number of bedrooms | Number of floors | Age of home(years) | price($1000) |
---|---|---|---|---|
2104 | 5 | 1 | 45 | 460 |
1416 | 3 | 2 | 40 | 232 |
1534 | 3 | 2 | 30 | 315 |
852 | 2 | 1 | 36 | 178 |
… | … | … | … | … |
接着用矩阵来表示它们:
$$
X=\left[\begin
\vdots & \vdots & \vdots & \vdots & \vdots
\end2104 & 5 & 1 & 45 & 460 \1416 & 3 & 2 & 40 & 232 \1534 & 3 & 2 & 30 & 315 \852 & 2 & 1 & 36 & 178 \\right]
$$
- $x_^{(i)}$ 代表特征矩阵中第 $i$ 行的第 $j$ 个特征。
- $m$ 为样本数量。
- $n$ 为特征数量。
和一元线性回归一样,引入 $x_{0}=1$ 来简化公式:
$$
\begin
h_{\theta}(x)&=\theta_{0} x_{0}+\theta_{1} x_{1}+\theta_{2} x_{2}+\cdots+\theta_ x_
&=\theta^{\top} X
\end \
$$
此时模型中的参数 $\theta$ 是一个 $n+1$ 维的向量,特征矩阵 $X$ 的维度是 $m \times(n+1)$ 。
特征缩放(Feature Scaling)
观察我们的数据集,房屋面积的值大约是 0 ~ 2000 之间,而房屋数量则是在 0 ~ 5 之间,两者差别三位数量级,如果以这两个参数作为横纵坐标,绘制代价函数的等高线图的话,可以看出图像会非常的扁,梯度下降算法需要很多次的迭代才能收敛。
进行特征缩放(Feature Scaling) 操作可以减小样本数据的波动,使得梯度下降能够更快速的寻找到一条“捷径”,从而到达最小值处。特征缩放的方法有很多种,目的大都是把值缩小于 0 ~ 1 之间,便于梯度下降算法的工作。
min-max 归一化(Min-Max Normalization):
$$
X_=\frac{X-X_}{X_{\max }-X_{\min }}
$$
均值归一化(Mean Normalization):
$$
X_=\frac{X-\mu}{X_} \quad \text \quad X_{\text }=\frac{X-\mu}{X_{\text }-X_{\text }}
$$
- $\mu$ 为该特征所有样本数据的均值(mean)。
Z-score 标准化(Z-score Standardization):
$$
X_=\frac{X-\mu}{\sigma}
$$
- $\mu$ 为该特征所有样本数据的均值(mean)。
- $\sigma$ 为该特征所有样本数据的标准差(Standard Deviation)。
其中,标准差也被成为标准偏差:
$$
\sigma=\sqrt{\frac{1} \sum_\left(x_-\mu\right){2}}
$$
归一化/标准化实质是一种线性变换,线性变换有很多良好的性质,这些性质决定了对数据改变后不会造成“失效”,反而能提高数据的表现,这些性质是归一化/标准化的前提。比如有一个很重要的性质:线性变换不会改变原始数据的数值排序。
在使用梯度下降时, 归一化/标准化后可以加快梯度下降的求解速度,即提升模型的收敛速度。如左图所示,未归一化/标准化时形成的等高线偏椭圆,迭代时很有可能走“之”字型路线(垂直长轴),从而导致迭代很多次才能收敛。而如右图对两个特征进行了归一化,对应的等高线就会变圆,在梯度下降进行求解时能较快的收敛。
多变量梯度下降(Gradient Descent For Multiple Variables)
现在梯度下降算法需要变更为支持多变量迭代的形式,之前单变量梯度下降的公式为:
循环 {
$$
\begin
\theta_{0}:=\theta_{0}-\alpha \frac{1} \sum_\left(h_{\theta}\left(x
\theta_{1}:=\theta_{1}-\alpha \frac{1}{(i)}\right)-y^{(i)}\right) \ \sum_\left(\left(h_{\theta}\left(x{(i)}\right)-y{(i)}\right) \cdot x{(i)}\right)
\end
$$
}
以上是支持 $\theta_0$ 与 $\theta_1$ 两个参数的梯度下降,其实如果 $\theta_0$ 的式子变成这样:
$$
\theta_{0}:=\theta_{0}-\alpha \frac{1} \sum_\left(\left(h_{\theta}\left(x{(i)}\right)-y{(i)}\right) \cdot x{(i)}\right)
$$
那它也是等价于之前的式子的,因为在我们的特征矩阵中始终约定了 ,现在我们需要让它支持更多的变量:
循环 {
$$
\theta_:=\theta_-\alpha \frac{1} \sum_\left(\left(h_{\theta}\left(x{(i)}\right)-y{(i)}\right) \cdot x_{(i)}\right)
$$
}
这样的梯度下降理论上支持任意数量的特征参数。使用 Python 描述为:
# 单变量梯度下降
for ... in ... :
error = X.dot(theta) - y
theta[0] -= (alpha / m) * np.sum(error)
theta[1] -= (alpha / m) * np.sum(error.dot(X))
# theta 需要逐个运算
...
# 多变量梯度下降
for ... in ... :
theta -= (alpha / m) * (X.dot(theta) - y).dot(X)
# 直接将整个 theta 作为向量运算
...
从一元线性回归到多元线性回归最重要的是梯度下降算法的改变。
正规方程(Normal Equation)
到目前为止,求解参数最小值时一直在使用梯度下降的相关算法,其实还存在能与梯度下降比肩的算法,就是 正规方程(Normal Equation) 。正规方程在某些线性问题上更加适合于求解参数最小值,且它要比梯度下降这种迭代法更为简便,正规方程工作方式是一步求解出参数最小值,当然梯度下降也有优于正规方程的地方。
$$
\theta=\left(X{\top} X\right){-1} X^{\top} y
$$
- $X$ 为训练集特征矩阵(包含了 $X_0=1$ )。
- $y$ 为训练集结果标签向量。
- Matlab 中的正规方程:
pinv(X'*X)*X'*y
- Numpy 包中的正规方程:
np.linalg.inv(X.T@X)@X.T@y
- TensorFlow 中的正规方程:
mat = tf.matmul(tf.transpose(X), X) inv = tf.matrix_inverse(mat) vec = tf.matmul(tf.transpose(X), y) solution = tf.matmul(inv, vec)
虽然正规方程与梯度下降截然不同,但他们的作用都是用于求解参数最小值。
梯度下降 | 正规方程 |
---|---|
需要选择学习率 $\alpha$ | 不需要选择学习率 $\alpha$ |
需要进行多次迭代运算求解 | 一次求解运算即可得出结果 |
当特征数量 $n$ 较大时也能较好适用 | 需要计算 $\left(X{\top} X\right)$ 的逆,如果特征数量 $n$ 越大,则运算代价越大,因为涉及到矩阵的逆运算,计算时间复杂度为 $O\left(n{3}\right)$ |
适用于各种类型的模型 | 只适用于线性模型,不适用于逻辑回归模型等其他模型 |
对于那些不可逆的矩阵(通常是因为特征之间不独立,如同时包含英尺为单位的尺寸和米为单位的尺寸两个特征,也有可能是特征数量大于训练集的数量),是无法使用正规方程方法的。
小结
到目前为止,简单的线性回归模型俨然建立完毕。对于特征缩放并不是每种算法都需要做的,只是梯度下降会很需要特征缩放这种操作,因为特征缩放会影响到梯度下降的效率,但在正规方程或者是神经网络中是不需要进行特征缩放的。
References
[1]Andrew Ng.Machine Learning.Coursera.2014
[2]深度碎片.吴恩达机器学习图解笔记.Bilibili.2018-3
[3]黄海广.斯坦福大学2014机器学习教程笔记.GitHub.2018-5
[4]brucep3.归一化、标准化和中心化/零均值化.简书.2018-6
《吴恩达机器学习系列课程》笔记