ML 03 - Linear Regression with multiple variables

145 阅读5分钟

Linear Regression with multiple variables

多参数线性回归本质上是单参数线性回归的推广。

一、多功能

1. 前情回顾:

  • 单特征回归的数据集

    Size(feet^2)Size(feet^2)
    xy
    2104460
    1416232
    1534315
    852178
    …………
  • 单特征回归的假设方程

    hθ(x)=θ0+θ1xh_{\theta}(x)=\theta_{0}+\theta_{1} x

2. 多特征回归

  • 数据集

    Size(feet^2)Bedrooms numberFloors numberHome yearsPrice(feet^2)
    x1x_{1}x2x_{2}x3x_{3}x4x_{4}y
    21045145460
    14163240232
    15343230315
    8522136178
    …………………………
  • 样例术语

    • n 代表特征数量,上表中 n = 4
    • x(i)x^{(i)}表示第 i 个训练样本。如 x(3)x^{(3)}​ = [15343230]\begin{bmatrix} 1534 \\ 3\\ 2\\ 30 \end{bmatrix},以列向量的形式给出。
    • xj(i)x^{(i)}_{j}表示第 i 个训练样本的第 j 个特征。如 x3(2)x^{(2)}_{3} = 2
  • 假设方程[多元方程]

    hθ(x)=θ0x0+θ1x1+θ2x2+θ3x3+θ4x4+...+θnxnh_{\theta}(x)=\theta_{0} x_{0}+\theta_{1} x_{1}+\theta_{2} x_{2}+ \theta_{3} x_{3} +\theta_{4} x_{4}+ ... + \theta_{n} x_{n}.

    此方程中常把 x0x_{0}取为 1 ,也就是将θ0\theta_{0}作为常数项,便于之后利用矩阵乘法来简化计算 。

3. 利用向量简化计算流程

hθ(x)=θ0x0+θ1x1+θ2x2+θ3x3+θ4x4+...+θnxnh_{\theta}(x)=\theta_{0} x_{0}+\theta_{1} x_{1}+\theta_{2} x_{2}+ \theta_{3} x_{3} +\theta_{4} x_{4}+ ... + \theta_{n} x_{n}.按照习惯,将未知量矩阵[向量] (θi\theta_{i})写在前面,已知量矩阵[向量] (xix_{i})写在后面。以上面的房价预测为例:

[θ0θ1θ2θ3θ4][x0(1)x0(2)x0(3)x0(4)x1(1)x1(2)x1(3)x1(4)x2(1)x2(2)x2(3)x2(4)x3(1)x3(2)x3(3)x3(4)x4(1)x4(2)x4(3)x4(4)]\begin{bmatrix} \theta_{0} & \theta_{1} & \theta_{2} & \theta_{3} & \theta_{4} \end{bmatrix} \begin{bmatrix} x^{(1)}_{0} & x^{(2)}_{0} & x^{(3)}_{0} & x^{(4)}_{0}\\ x^{(1)}_{1} & x^{(2)}_{1} & x^{(3)}_{1} & x^{(4)}_{1}\\ x^{(1)}_{2} & x^{(2)}_{2} & x^{(3)}_{2} & x^{(4)}_{2}\\ x^{(1)}_{3} & x^{(2)}_{3} & x^{(3)}_{3} & x^{(4)}_{3}\\ x^{(1)}_{4} & x^{(2)}_{4} & x^{(3)}_{4} & x^{(4)}_{4} \end{bmatrix} = [y1y2y3y4]\begin{bmatrix} y_{1} & y_{2} & y_{3} & y_{4} \end{bmatrix} 。式中的x0(i)x^{(i)}_{0}一般取值都为1,如此一来,计算过程就十分简单了。

二、多元梯度下降法

1. 前情回顾[单特征回归]:

  • 代价函数

    J(θ0,θ1)=12mi=1m(hθ(x(i))y(i))2J\left(\theta_{0}, \theta_{1}\right)=\frac{1}{2 m} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right)^{2}

  • 迭代流程

    Gradient descent algorithm repeat until convergence {

    θj:=θjαθjJ(θ0,θ1) (for j=0 and j=1 ) \theta_{j}:=\theta_{j}-\alpha \frac{\partial}{\partial \theta_{j}} J\left(\theta_{0}, \theta_{1}\right) \quad \text { (for } j=0 \text { and } j=1 \text { ) }

    }

    Correct: Simultaneous update(同步更新,学习率是一致的,且一定为正数)

     temp0 :=θ0αθ0J(θ0,θ1) temp1 :=θ1αθ1J(θ0,θ1)θ0:= temp0 θ1:= temp1 \begin{array}{l} \text { temp0 }:=\theta_{0}-\alpha \frac{\partial}{\partial \theta_{0}} J\left(\theta_{0}, \theta_{1}\right) \\ \text { temp1 }:=\theta_{1}-\alpha \frac{\partial}{\partial \theta_{1}} J\left(\theta_{0}, \theta_{1}\right) \\ \theta_{0}:=\text { temp0 } \\ \theta_{1}:=\text { temp1 } \end{array}

  • 偏导数

    计算 j = 0 和 j = 1的对应的偏导数值:

    θjJ(θ0,θ1)=θj12mi=1m(θ0+θ1x(i)y(i))2j=0:θ0J(θ0,θ1)θ1J(θ0,θ1)=1mi=1m(hθ(x(i))y(i))j=1:1mi=1m(hθ(x(i))y(i))x(i)\begin{array}{l} \frac{\partial}{\partial \theta_{j}} J\left(\theta_{0}, \theta_{1}\right) =\frac{\partial}{\partial \theta_{j}} \frac{1}{2 m} \sum_{i=1}^{m}\left(\theta_{0}+\theta_{1} x^{(i)}-y^{(i)}\right)^{2} \\ j=0: \frac{\frac{\partial}{\partial \theta_{0}} J\left(\theta_{0}, \theta_{1}\right)}{\frac{\partial}{\partial \theta_{1}} J\left(\theta_{0}, \theta_{1}\right)}=\frac{1}{m} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right) \\ j=1: \frac{1}{m}\sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right) \cdot x^{(i)} \end{array}

2. 多特征回归

  • 代价函数

    J(θ)=12mi=1m(hθ(x(i))y(i))2J\left(\theta\right)=\frac{1}{2 m} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right)^{2},右侧表达式虽与一元一致,但是注意计算方式的不同。

  • 迭代流程

多元迭代.PNG

  • 偏导数

    上图已给出。代价函数是用来衡量性能的,偏导数则是用于迭代步长变换的,二者没有直接联系。

3. 技巧

  • 特征缩放
  1. 思路:确保所有特征都处于相似规模。

    例如:x1x_{1}∈ [1, 2000] (feet^2), x2x_{2}∈ [1, 5] (number of bedrooms)。那么在进行迭代时,形成的等高线图就异常瘦长,造成迭代过程十分缓慢,降低效率。

特征缩放.PNG

  1. 怎样进行?

    可以直接将 对应的 xix_{i}除以区间长度进行缩放,俗称归一化

    上例中的 : x1x_{1} = size(feet^2) / 2000, x2x_{2} = number of bedrooms / 5。当然,xix_{i}也可以为负数。

  2. 另一种归一化

    x1= size-1000 2000x2=# bedrooms-2 50.5x10.5,0.5x20.5\begin{array}{l} x_{1}=\frac{\text { size-1000 }}{2000}\\ x_{2}=\frac{\# \text { bedrooms-2 }}{5}\\ -0.5 \leq x_{1} \leq 0.5,-0.5 \leq x_{2} \leq 0.5 \end{array}xix_{i}的取值范围为 [- 0.5, 0.5]。 这样做的好处:使各参数迭代的更快,收敛所需的迭代次数更少

  • 学习率 α\alpha

    1. 迭代次数和代价函数 J 最小值的关系

      迭代次数与代价函数关系.PNG

      每次迭代都必须使 J 的最小值变小。若是在迭代过程中,代价函数 J 反而递增了,则应向下调整 α\alpha的值。

    2. 两种终止迭代的方法

      1. 模型自动进行收敛检测
      2. 声明 J 的最小阈值,到此为止
    3. 常见的α\alpha设置错误迭代方式

    常见错误迭代.PNG

    应向下调整 α\alpha的值。

4. 总结

α\alpha过大则可能导致 J 发散。α\alpha过小可能导致慢收敛(效率低)。

5. α\alpha的选取方法[* 3]

……,0.001,……, [0.003],……, 0.01,……, [0.03],……, 0.1,……, [0.3],……, 1,…….

三、特征和多项式回归

1. 特征简化

还是以上面的房价预测作为例子。

  • 假设我们将房子的宽度(frontage)和纵深(depth)作为房子的两个特征,那么我们会得到如下的假设函数:

    hθ(x)=θ0+θ1frontage+θ2depthh_{\theta}(x) = {\theta_{0}}+{\theta_{1}}*frontage+{\theta_{2}}*depth.

  • 我们可以适当简化各特征量,来简化迭代流程,如上面的 宽度(frontage)和纵深(depth) 就可以使用一个特征 :面积(Area = frontage * depth)来代替。

    也即: hθ(x)=θ0+θ1Areah_{\theta}(x) = {\theta_{0}}+{\theta_{1}}*Area.这样就会使迭代流程简化许多。

2. 选择假设函数

根据训练样本的基本分布图像来选择合适的假设函数。如下图:

样本特征图像.PNG

我们可以选择二次函数作为假设函数:hθ(x)=θ0+θ1x1+θ2x22h_{\theta}(x) = {\theta_{0}}+{\theta_{1}}*x_{1}+{\theta_{2}}*x_{2}^{2},实际上 x1=x2x_{1} = x_{2}

但是这个二次函数只模拟了前面一段的 Size - Price关系,由于二次函数开口向下,则后面一定会出现随着 Size递增,Price反而递减的情况,所以不符题意。可作如下调整:

  1. 加入三次方:hθ(x)=θ0+θ1x1+θ2x22+θ3x33h_{\theta}(x) = {\theta_{0}}+{\theta_{1}}*x_{1}+{\theta_{2}}*x_{2}^{2} + {\theta_{3}}*x_{3}^{3},当然此处的x1=x2=x2=Sizex_{1} = x_{2} = x_{2} = Size。但是计算量又过大。
  2. 变为开二次方:hθ(x)=θ0+θ1x1+θ2x21/2h_{\theta}(x) = {\theta_{0}}+{\theta_{1}}*x_{1}+{\theta_{2}}*x_{2}^{1/2}——最佳选择。

四、正规方程

区别于之前的迭代方法的直接解法。之前的梯度下降法是一次性对所有θi{\theta_{i}}进行迭代,而正规方程是逐步解决θi{\theta_{i}}的取值。

  • 引例
  1. 假设代价函数和θ{\theta}的关系为:J(θ{\theta}) = aθ2{\theta^{2}} + bθ{\theta} + c,此处的θ{\theta}为标量,如下图:

J - θ.PNG

  1. 运用中学知识,要求J(θ{\theta})的最小值点,则应先对J(θ{\theta})求导,并将该式令为0,解出对应的θi{\theta_{i}}

  2. 梯度下降迭代θi{\theta_{i}}的过程:

    θRn+1J(θ0,θ1,,θm)=12mi=1m(hθ(x(i))y(i))2θjJ(θ)==0 (for every j)\begin{array}{c}\theta \in \mathbb{R}^{n+1} \quad J\left(\theta_{0}, \theta_{1}, \ldots, \theta_{m}\right)=\frac{1}{2 m} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right)^{2} \\\left.\frac{\partial}{\partial \theta_{j}} J(\theta)=\cdots=0 \quad \text { (for every } j\right)\end{array}

    SolveSolve for θ0,θ1,,θn\theta_{0}, \theta_{1}, \ldots, \theta_{n} ,计算过程尤为繁琐,且此处的θ{\theta}为一个向量。

  3. 改良:

    1. 例子: m = 4

      Size(feet^2)Bedrooms numberFloors numberHome yearsPrice(feet^2)
      x0x_{0}x1x_{1}x2x_{2}x3x_{3}x4x_{4}y
      121045145460
      114163240232
      115343230315
      18522136178
      1…………………………

      将数据集和对应的正确结果分别装入矩阵和向量。

      X=[12104514511416324011534323018522136]y=[460232315178]X=\left[\begin{array}{ccccc} 1 & 2104 & 5 & 1 & 45 \\ 1 & 1416 & 3 & 2 & 40 \\ 1 & 1534 & 3 & 2 & 30 \\ 1 & 852 & 2 & 1 & 36 \end{array}\right] \quad y=\left[\begin{array}{c} 460 \\ 232 \\ 315 \\ 178 \end{array}\right]

    2. 重头戏:不用使用繁琐求导来迭代θi{\theta_{i}},只要求出θ=(XTX)1XTy\theta=\left(X^{T} X\right)^{-1} X^{T} y就可以得出最佳结果。

    3. 推广:

      1. m 个样本, n 个特征:m examples (x(1),y(1)),,(x(m),y(m));n features. m \text { examples }\left(x^{(1)}, y^{(1)}\right), \ldots,\left(x^{(m)}, y^{(m)}\right) ; n \text { features. }

        x(i)=[x0(i)x1(i)x2(i)xn(i)]Rn+1\underline{x^{(i)}}=\left[\begin{array}{c} x_{0}^{(i)} \\ x_{1}^{(i)} \\ x_{2}^{(i)} \\ \vdots \\ x_{n}^{(i)} \end{array}\right] \in \mathbb{R}^{n+1}x0(i)=1x_{0}^{(i)} = 1便于向量乘法。y=[y(1)y(2)y(3)y(m)]Rm\underline{y}=\left[\begin{array}{c} y^{(1)} \\ y^{(2)} \\ y^{(3)} \\ \vdots \\ y^{(m)} \end{array}\right] \in \mathbb{R}^{m}.

  4. 正规方程和梯度下降的性能比较:

Gradient Descent(梯度下降)Normal Equation(正规方程)
需要选择 α{\alpha}不用使用步幅α{\alpha}
需要多次迭代不用迭代,但是需要计算(XTX)1\left(X^{T} X\right)^{-1}
在 n (> = 10 ^ 6)较大的情况下,性能更佳当 n 较小时,性能更好
  1. 矩阵不可逆的解决办法:
    1. 问题描述:使用正规方程解决θ{\theta}的取值时,矩阵不可逆,即(XTX)1\left(X^{T} X\right)^{-1}非法。
    2. 产生原因:
      1. 特征冗余:x1x_{1} in feets2, feets^{2}, x2x_{2} in m2 m^{2},都表示房子面积
      2. 特征过多:可以删除某些特征或者使用正则化