多元线性回归

category
tags
机器学习
回归算法
attribute
笔记
source
date
Dec 9, 2018
slug
multiple-linear-regression
status
Published
summary
在一元线性回归中虽然只有一个房屋面积的特征,但是相对来说我们更倾向于多元线性回归,因为要预测一个值,往往不是一个特征就能够将其描述完整的,我们需要一个能够支持多个特征的模型来完善我们的线性回归算法。

在一元线性回归中虽然只有一个房屋面积的特征,但是相对来说我们更倾向于多元线性回归,因为要预测一个值,往往不是一个特征就能够将其描述完整的,我们需要一个能够支持多个特征的模型来完善我们的线性回归算法,就是接下来的多元线性回归(Linear Regression with Multiple Variables, Multivariate Linear Regression)

多维特征(Multiple Features)

在多元线性回归建模之前,首先要为我们的房价数据集增加更多的特征,例如房间的楼层数、使用年份、卧室数等,这些都对房屋价格有着关键性的影响,所以我们应该把它们作为特征加入到我们的训练集中,构成一个含有多的变量的线性回归模型:
 
接着用矩阵来表示它们:
💡
代表特征矩阵中第 i 行的第 j 个特征。m 为样本数量。n 为特征数量。
和一元线性回归一样,引入 来简化公式:
此时模型中的参数 θ 是一个 n + 1 维的向量,特征矩阵 X 的维度是 m × (n + 1) 。

特征缩放(Feature Scaling)

观察我们的数据集,房屋面积的值大约是 0 ~ 2000 之间,而房屋数量则是在 0 ~ 5 之间,两者差别三位数量级,如果以这两个参数作为横纵坐标,绘制代价函数的等高线图的话,可以看出图像会非常的扁,梯度下降算法需要很多次的迭代才能收敛。
进行特征缩放(Feature Scaling) 操作可以减小样本数据的波动,使得梯度下降能够更快速的寻找到一条“捷径”,从而到达最小值处。特征缩放的方法有很多种,目的大都是把值缩小于 0 ~ 1 之间,便于梯度下降算法的工作。
 
min-max 归一化(Min-Max Normalization):
 
均值归一化(Mean Normalization):
💡
μ 为该特征所有样本数据的均值(mean)
 
Z-score 标准化(Z-score Standardization):
💡
μ 为该特征所有样本数据的均值(mean)σ 为该特征所有样本数据的标准差(Standard Deviation)
其中,标准差也称为标准偏差:

归一化/标准化实质是一种线性变换,线性变换有很多良好的性质,这些性质决定了对数据改变后不会造成“失效”,反而能提高数据的表现,这些性质是归一化/标准化的前提。比如有一个很重要的性质:线性变换不会改变原始数据的数值排序。
在使用梯度下降时, 归一化/标准化后可以加快梯度下降的求解速度,即提升模型的收敛速度。如左图所示,未归一化/标准化时形成的等高线偏椭圆,迭代时很有可能走“之”字型路线(垂直长轴),从而导致迭代很多次才能收敛。而如右图对两个特征进行了归一化,对应的等高线就会变圆,在梯度下降进行求解时能较快的收敛。

多变量梯度下降(Gradient Descent For Multiple Variables)

现在梯度下降算法需要变更为支持多变量迭代的形式,之前单变量梯度下降的公式为:
 
以上是支持 θ0θ1 两个参数的梯度下降,其实如果 θ0 的式子变成这样:
那它也是等价于之前的式子的,因为在我们的特征矩阵中始终约定了 ,现在我们需要让它支持更多的变量:
这样的梯度下降理论上支持任意数量的特征参数。使用 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) 。正规方程在某些线性问题上更加适合于求解参数最小值,且它要比梯度下降这种迭代法更为简便,正规方程工作方式是一步求解出参数最小值,当然梯度下降也有优于正规方程的地方。
  • X 为训练集特征矩阵(包含了 )。
  • 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)
虽然正规方程与梯度下降截然不同,但他们的作用都是用于求解参数最小值。
 
对于那些不可逆的矩阵(通常是因为特征之间不独立,如同时包含英尺为单位的尺寸和米为单位的尺寸两个特征,也有可能是特征数量大于训练集的数量),是无法使用正规方程方法的。

小结

到目前为止,简单的线性回归模型俨然建立完毕。对于特征缩放并不是每种算法都需要做的,只是梯度下降会很需要特征缩放这种操作,因为特征缩放会影响到梯度下降的效率,但在正规方程或者是神经网络中是不需要进行特征缩放的。

References


《吴恩达机器学习系列课程》笔记

Nobelium is built with ♥ and ⚛ Next.js. Proudly deployed on ▲Vercel.

© Ashinch 2021 桂ICP备18011166号-1