多元线性回归

本文关于吴恩达老师机器学习课程笔记~

多功能

在前面,我们假设房子的价格只与房子的大小这一因素有关系,因此在假设函数中只有一个参数 x ,即 hθ(x)=θ0+θ1xh_{\theta} (x) = \theta_0 + \theta_1 x

多元线性回归

那如果房子的价格跟多个因素有关系呢?比如大小、房间数量,楼层数量、房龄等,应该怎样表示假设函数 h(x) ?

我们把以上四个特征分别记为 x1,x2,x3,x4x_1,x_2,x_3,x_4,用 y 表示要预测的输出变量。

符号表示:

  • n = 4 表示特征向量的数量
  • x(i)x^{(i)} 表示第 i 个样本的特征向量,x(i)x^{(i)} 是 n 维向量
  • xj(i)x^{(i)}_j 表示第 i 个样本的第 j 个特征向量

既然有多个特征向量,线性回归假设应该为

h(x)=θ0+θ1x1+...+θnxnh(x) = \theta_0 + \theta_1 x_1 + ...+\theta_n x_n

为了表示方便,假设 x0=1x_0 = 1,这意味着对于第 i 个训练样本,都有 x0(i)=1x_0^{(i)} = 1

x=[x0x1xn]Rn+1x = \begin{bmatrix} x_0\\ x_1\\ \vdots\\ x_n \end{bmatrix} \in \Bbb R^{n+1}       ~~~~~~ θ=[θ0θ1θn]Rn+1\theta = \begin{bmatrix} \theta_0\\ \theta_1\\ \vdots\\ \theta_n \end{bmatrix} \in \Bbb R^{n+1}

h(x)=θ0+θ1x1+...+θnxn=θTxh(x) = \theta_0 + \theta_1 x_1 + ...+\theta_n x_n = \theta^Tx


多元梯度下降法

多元线性回归


特征缩放

在具有多个特征的线性回归中,如果能确保特征都处在一个相近的范围,这样梯度下降法就能更快的收敛

具体的,假设有尺寸和房间数量两个特征,x1=size(02000feet2),x2=number of bedrooms(15)x_1 = size(0-2000feet^2),x_2 = number~ of~ bedrooms(1-5)

画出 x1,x2x_1,x_2 代价函数的等高线图如下,如果直接运行梯度下降的话,梯度会来回波动,并且需要很长一段时间才能收敛到最小值

多元线性回归

解决这个问题的一个有效方法就是进行特征缩放
x1=size(feet2)2000,x2=numberofbedrooms5x_1= \frac{size(feet^2)}{2000},x_2 = \frac{number of bedrooms}{5},则 0x11,0x210 \leq x_1 \leq 1,0 \leq x_2 \leq 1 ,得到的代价函数等高线图如下

多元线性回归

经过特征缩放后的等高线图接近圆形,梯度下降很快收敛到最小值

更一般的,当我们在进行特征缩放时,通常将特征的取值约束到 -1 ~ +1范围内,至少不会偏离太多

均值归一化

xiuix_i - \mathit u_i 代替 xix_i(其中 ui\mathit u_i 为平均值)使得特征具有为 0 的平均值,很明显,我们不需要对 x0x_0 执行这一步,因为 x0x_0 恒为 1,不可能具有为 0 的平均值。

更一般的,令 xi=xiuisx_i = \frac{x_i - \mathit u_i}{s},其中 s 为最大值减最小值

经过特征缩放后,梯度下降的速度变得更快,收敛所需的迭代次数更少


学习率

在正常情况下,代价函数的值应该随着迭代次数的增加而下降,如图

多元线性回归

若代价函数的值随着迭代次数的增加而增大或者上下波动,则应减小学习率 α\alpha 的值。

多元线性回归

学习率的选择

对每一个特定问题,梯度下降算法所需的迭代次数可能会相差很远。

  • 若学习率设置太大,代价函数并不会在每次迭代后都下降
  • 若学习率设置太小,代价函数收敛很慢

在学习率的选择上,可以把学习率设置为…,0.001,0.003,0.01,0.03,0.1,0.3,1,…


正规方程

在梯度下降算法中,我们需要通过迭代一步一步的求出 θ\theta 的最优值,而正规方程提供一种求 θ\theta 的解析解法,可以一次求解 θ\theta 的最优值

为了对这个算法有个直观的了解,我们举个简单的例子,假设 J(θ)=αθ2+bθ+cJ(\theta) = \alpha \theta^2 + b\theta + c,假设 θ\theta 为实数而非向量,要令 J(θ)J(\theta) 取得最小值,可令 ddθJ(θ)=0\frac{d}{d\theta}J(\theta) = 0 ,求得 θ\theta 的值
在我们感兴趣的问题中,θ\theta 是一个向量而非实数 θRn+1\theta \in \Bbb R^{n+1},而代价函数
J(θ0,θ1,...,θn)=12mi=1m(hθ(x(i)y(i))2J(\theta_0,\theta_1,...,\theta_n) = \frac{1}{2m}\sum_{i=1}^m(h_\theta(x^{(i)} - y^{(i)})^2

要使代价函数取得最小值,可令ddθjJ(θ)=0\frac{d}{d\theta_j}J(\theta) = 0,然后计算 θ0,θ1,...,θn\theta_0,\theta_1,...,\theta_n 的值。但是遍历完所有积分是一件很费事的事情

我们举一个例子来解释正规方程法

下图我们在所有特征前面加一个特征 x0=1x_0 = 1,则 XRm×(n+1),yRmX \in \Bbb R^{m \times(n+1)},y \in \Bbb R^m
θ=(XTX)1XTy\theta = (X^TX)^{-1}X^Ty ,便可求得使代价函数取得最小值的 θ\theta

多元线性回归

在一般情况下,假设有 m 个训练样本 (x(1),y(1)),...,(x(m),y(m))(x^{(1)},y^{(1)}),...,(x^{(m)},y^{(m)}),n 个特征

x(i)=[x0(i)x1(i)xn(i)]Rn+1x^{(i)} = \begin{bmatrix} x_0^{(i)}\\ x_1^{(i)}\\ \vdots\\ x_n^{(i)} \end{bmatrix} \in \Bbb R^{n+1}

X=[(x(1))T(x(2))T(x(m))T]Rm×(n+1),θ=(XTX)1XTyX = \begin{bmatrix} (x^{(1)})^T\\ (x^{(2)})^T\\ \vdots\\ (x^{(m)})^T\\ \end{bmatrix} \in \Bbb R^{m \times (n+1)},\theta = (X^TX)^{-1}X^Ty

在梯度下降算法中,我们提到要进行特征缩放,但是在正规方程中则不需要,即若 x1(0,1),x2(0,10000),x3(0,105)x_1 \in (0,1),x_2 \in (0,10000),x_3 \in (0,10^{-5})也是可以的

梯度下降法和正规方程的优缺点

梯度下降法:

  • 优点:
    • 当特征数量 n 很多的时候算法性能依然很好
  • 缺点:
    • 需要选择学习率,并且经过多次尝试
    • 需要进行多次迭代

正规方程法:

  • 优点:
    • 不需要选择学习率
    • 不需要进行迭代
  • 缺点:
    • 计算 (XTX)1(X^TX)^{-1},时间复杂度为 O(n3)O(n^3)
    • 当特征数量 n 较多时,计算慢

因此,当 n 较小时 (n < 1000 or 10000),正规方程法是一个很好的选择,当 n 较大时,选择梯度下降法