Chapter4:多变量线性回归:AndrewNg吴恩达《机器学习》笔记

文章目录

    • 4.1 多维特征
    • 4.2 多变量梯度下降
      • 4.2.1 算法介绍
      • 4.2.2 梯度下降法实践1:特征缩放
      • 4.2.3 梯度下降法实践2: 学习率
    • 4.3 特征与多项式回归
      • 4.3.1 自己选择特征
      • 4.3.2 多项式回归
    • 4.4 正规方程(Normal equation)—— 相比于梯度下降法
      • 4.4.1 正规方程 vs. 梯度下降法
      • 4.4.2 正规方程算法过程
      • 4.4.3 重要结论
      • 4.4.4 正规方程的不可逆性(可选)

4.1 多维特征

  • 图:

Chapter4:多变量线性回归:AndrewNg吴恩达《机器学习》笔记_第1张图片

增添更多特征后,我们引入一系列新的注释:

  • n n n 代表特征的数量

  • x ( i ) {x^{\left( i \right)}} x(i)代表第 i i i 个训练实例,是特征矩阵中的第 i i i行,是一个向量vector)。

    比方说,上图的

x ( 2 ) = [ 1416 3 2 40 ] {x}^{(2)}\text{=}\begin{bmatrix} 1416\\ 3\\ 2\\ 40 \end{bmatrix} x(2)=14163240

  • x j ( i ) {x}_{j}^{\left( i \right)} xj(i)代表特征矩阵中第 i i i 行的第 j j j 个特征,也就是第 i i i 个训练实例的第 j j j 个特征。

​ 如上图的 x 2 ( 2 ) = 3 , x 3 ( 2 ) = 2 x_{2}^{\left( 2 \right)}=3,x_{3}^{\left( 2 \right)}=2 x2(2)=3,x3(2)=2

  • 支持多变量的假设 h h h 表示为: h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 + . . . + θ n x n h_{\theta}\left( x \right)={\theta_{0}}+{\theta_{1}}{x_{1}}+{\theta_{2}}{x_{2}}+...+{\theta_{n}}{x_{n}} hθ(x)=θ0+θ1x1+θ2x2+...+θnxn

    Chapter4:多变量线性回归:AndrewNg吴恩达《机器学习》笔记_第2张图片

    • 这个公式中有 n + 1 n+1 n+1个参数和 n n n个变量,为了使得公式能够简化一些,引入 x 0 = 1 x_{0}=1 x0=1,则公式转化为: h θ ( x ) = θ 0 x 0 + θ 1 x 1 + θ 2 x 2 + . . . + θ n x n h_{\theta} \left( x \right)={\theta_{0}}{x_{0}}+{\theta_{1}}{x_{1}}+{\theta_{2}}{x_{2}}+...+{\theta_{n}}{x_{n}} hθ(x)=θ0x0+θ1x1+θ2x2+...+θnxn

      Chapter4:多变量线性回归:AndrewNg吴恩达《机器学习》笔记_第3张图片

    • 此时模型中的参数是一个 n + 1 n+1 n+1维的向量,任何一个训练实例也都是 n + 1 n+1 n+1维的向量,特征矩阵 X X X的维度是 m ∗ ( n + 1 ) m*(n+1) m(n+1)

    • 因此公式可以简化为: h θ ( x ) = θ T X h_{\theta} \left( x \right)={\theta^{T}}X hθ(x)=θTX,其中上标 T T T代表矩阵转置。

4.2 多变量梯度下降

4.2.1 算法介绍

  • 在这一小节中我们将尝试 用梯度下降法,来最小化 多变量线性回归的代价函数。

    与单变量线性回归类似,在多变量线性回归中,我们也构建一个代价函数,则这个代价函数是所有建模误差的平方和,即: J ( θ 0 , θ 1 . . . θ n ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J\left( {\theta_{0}},{\theta_{1}}...{\theta_{n}} \right)=\frac{1}{2m}\sum\limits_{i=1}^{m}{{{\left( h_{\theta} \left({x}^{\left( i \right)} \right)-{y}^{\left( i \right)} \right)}^{2}}} J(θ0,θ1...θn)=2m1i=1m(hθ(x(i))y(i))2

    其中: h θ ( x ) = θ T X = θ 0 + θ 1 x 1 + θ 2 x 2 + . . . + θ n x n h_{\theta}\left( x \right)=\theta^{T}X={\theta_{0}}+{\theta_{1}}{x_{1}}+{\theta_{2}}{x_{2}}+...+{\theta_{n}}{x_{n}} hθ(x)=θTX=θ0+θ1x1+θ2x2+...+θnxn

    我们把 θ 0 , θ 1 , θ 2 . . . {\theta_{0}},{\theta_{1}},{\theta_{2}}... θ0,θ1,θ2...看成一个整体,即:向量 θ {\theta} θ

    **我们的目标和单变量线性回归问题中一样,是要找出使得代价函数最小的一系列参数。 **

    Chapter4:多变量线性回归:AndrewNg吴恩达《机器学习》笔记_第4张图片

  • 图:

    我们开始随机选择一组的参数值,计算所有的预测结果后,再给所有的参数一个新的值,如此循环直到收敛。

    Chapter4:多变量线性回归:AndrewNg吴恩达《机器学习》笔记_第5张图片

4.2.2 梯度下降法实践1:特征缩放

  • 在我们面对多维特征问题的时候,我们要保证这些特征都具有相近的尺度,这将帮助梯度下降算法更快地收敛。

    • 例子: 以房价问题为例,假设我们使用两个特征,房屋的尺寸和房间的数量,尺寸的值为 0-2000平方英尺,而房间数量的值则是0-5,以两个参数分别为横纵坐标,绘制代价函数的等高线图能,看出图像会显得很扁,梯度下降算法需要非常多次的迭代才能收敛。

      Chapter4:多变量线性回归:AndrewNg吴恩达《机器学习》笔记_第6张图片

    • 解决的方法是尝试将所有特征的尺度**都尽量缩放到-1到1之间。**如图:

      Chapter4:多变量线性回归:AndrewNg吴恩达《机器学习》笔记_第7张图片

    • 但并不是一定要求在 -1和1之间。在**-3 ~ 3, -1/3 ~ 1/3** 之间都还能接受,但如果太大或者太小则不太好了。总之,这不是一个强硬的规定。

      Chapter4:多变量线性回归:AndrewNg吴恩达《机器学习》笔记_第8张图片

  • 均值归一化(Mean normalization)

    • 除了直接除以最大值外,我们经常也用均值归一化的方法来加快梯度下降的速度

    • **这里减去的1000和2,指的是均值。**而不是简单的范围的一半。

    • 得出的结果,绝大多数在 -0.5~0.5 之间,但不绝对。

    • x 1 : = ( x 1 − u 1 ) / s 1 x_1 := (x_1-u_1)/s_1 x1:=(x1u1)/s1 为例: u 1 u_1 u1指的是均值, s 1 s_1 s1指的是范围:即 max—min。

    • 细心的朋友可以发现,如果是范围的话,那么上面bedrooms的分母应该是4,而不是5。实际上,均值归一化的目标就是为了加快梯度下降,达到目的即可,并不需要太精确。

      Chapter4:多变量线性回归:AndrewNg吴恩达《机器学习》笔记_第9张图片

4.2.3 梯度下降法实践2: 学习率

  • 梯度下降算法收敛所需要的迭代次数根据模型的不同而不同,我们不能提前预知

    我们可以绘制迭代次数和代价函数的图表,来观测算法在何时趋于收敛。

    • 方法一:自动收敛测试:当相邻两次梯度下降误差小于某一个特定阈值 ϵ \epsilon ϵ 的时候,则结束。但这种方法下,特定阈值 ϵ \epsilon ϵ 比较难选取。

    • 方法二:直接看左边的图表。

      Chapter4:多变量线性回归:AndrewNg吴恩达《机器学习》笔记_第10张图片

  • 学习率的大小:

    • 左边的两种情形都可以通过使用更小的学习率来解决。

      Chapter4:多变量线性回归:AndrewNg吴恩达《机器学习》笔记_第11张图片

    • 只要学习率足够小,理论上一定能达到局部最小值。

    • 但学习率太小,迭代的次数会过多

  • 结论:运行梯度下降法的时候,通常绘制 J ( θ ) J(\theta) J(θ)随迭代步数变化的曲线,来帮助判断过大or过小。

    • Andrew Ng 通常如下这样取值,两个数之间间隔大约3倍。直到找到一个太小的值 和 一个太大的值,然后取最大值或者比最大值偏小一点点的值,往往结果都不错。

    Chapter4:多变量线性回归:AndrewNg吴恩达《机器学习》笔记_第12张图片

4.3 特征与多项式回归

4.3.1 自己选择特征

  • 例子:不用 x 1 x_1 x1 x 2 x_2 x2 ,而用 两者的乘积 x x x —— land area 作为特征。

    Chapter4:多变量线性回归:AndrewNg吴恩达《机器学习》笔记_第13张图片

  • 结论:这取决于你从什么样的角度去审视问题。有的时候去定义一个新的特征会得到一个更好的模型。

4.3.2 多项式回归

  • 例子:

    Chapter4:多变量线性回归:AndrewNg吴恩达《机器学习》笔记_第14张图片

    • 一次函数:显然不合适

    • 二次函数:虽然数据能够拟合,但是随着Size越大,Price并不应该越小,所以也不合适。

    • 三次函数:满足要求。

    • 通常我们需要先观察数据然后再决定准备尝试怎样的模型。

      注:如果我们采用多项式回归模型,在运行梯度下降算法前,**特征缩放 **非常有必要。

  • 也可以有其他合理的选择:

    h ∗ θ ( x ) = θ ∗ 0 + θ ∗ 1 ( s i z e ) + θ ∗ 2 ( s i z e ) 2 {{{h}}*{\theta}}(x)={{\theta }*{0}}\text{+}{{\theta }*{1}}(size)+{{\theta}*{2}}{{(size)}^{2}} hθ(x)=θ0+θ1(size)+θ2(size)2 或者

    h ∗ θ ( x ) = θ ∗ 0 + θ ∗ 1 ( s i z e ) + θ ∗ 2 s i z e {{{h}}*{\theta}}(x)={{\theta }*{0}}\text{+}{{\theta }*{1}}(size)+{{\theta }*{2}}\sqrt{size} hθ(x)=θ0+θ1(size)+θ2size

    Chapter4:多变量线性回归:AndrewNg吴恩达《机器学习》笔记_第15张图片

4.4 正规方程(Normal equation)—— 相比于梯度下降法

4.4.1 正规方程 vs. 梯度下降法

  • 为了最小化 J J J ,我们到现在都是用的梯度下降法,这属于一种迭代的方法。

  • 正规方程法属于一种解析解法,我们可以一次性地求出 θ \theta θ 最优值。

  • 梯度下降与正规方程的比较:

    梯度下降 正规方程
    需要选择学习率 α \alpha α 不需要
    需要多次迭代 一次运算得出
    当特征数量 n n n大时也能较好适用 需要计算 ( X T X ) − 1 {{\left( {{X}^{T}}X \right)}^{-1}} (XTX)1 如果特征数量n较大则运算代价大,因为矩阵逆的计算时间复杂度为 O ( n 3 ) O\left( {{n}^{3}} \right) O(n3),通常来说当 n n n小于10000 时还是可以接受的
    适用于各种类型的模型 只适用于线性模型,不适合逻辑回归模型等其他模型

4.4.2 正规方程算法过程

到目前为止,我们都在使用梯度下降算法,但是对于某些线性回归问题,正规方程方法是更好的解决方案。如:

Chapter4:多变量线性回归:AndrewNg吴恩达《机器学习》笔记_第16张图片

正规方程是通过求解下面的方程来找出使得代价函数最小的参数的: ∂ ∂ θ j J ( θ j ) = 0 \frac{\partial}{\partial{\theta_{j}}}J\left( {\theta_{j}} \right)=0 θjJ(θj)=0 。 假设我们的训练集特征矩阵为 X X X(包含了 x 0 = 1 {{x}_{0}}=1 x0=1)并且我们的训练集结果为向量 y y y,则利用正规方程解出向量 θ = ( X T X ) − 1 X T y \theta ={{\left( {X^T}X \right)}^{-1}}{X^{T}}y θ=(XTX)1XTy 。 上标T代表矩阵转置,上标-1 代表矩阵的逆。设矩阵 A = X T X A={X^{T}}X A=XTX,则: ( X T X ) − 1 = A − 1 {{\left( {X^T}X \right)}^{-1}}={A^{-1}} (XTX)1=A1 以下表示数据为例:

Chapter4:多变量线性回归:AndrewNg吴恩达《机器学习》笔记_第17张图片

即:
Chapter4:多变量线性回归:AndrewNg吴恩达《机器学习》笔记_第18张图片

运用正规方程方法求解参数:

Chapter4:多变量线性回归:AndrewNg吴恩达《机器学习》笔记_第19张图片

Octave 中,正规方程写作:

pinv(X'*X)*X'*y

注:对于那些不可逆的矩阵(通常是因为特征之间不独立,如同时包含英尺为单位的尺寸和米为单位的尺寸两个特征,也有可能是特征数量大于训练集的数量),正规方程方法是不能用的。

4.4.3 重要结论

  • 总结一下,只要特征变量的数目并不大,正规方程是一个很好的计算参数$\theta $的替代方法。

    具体地说,只要特征变量数量小于一万,我通常使用正规方程法,而不使用梯度下降法

  • 随着我们要讲的学习算法越来越复杂,例如,当我们讲到分类算法,像逻辑回归算法,我们会看到,实际上对于那些算法,并不能使用标准方程法。对于那些更复杂的学习算法,我们将不得不仍然使用梯度下降法。

  • **梯度下降法:**适用于:有大量特征变量的线性回归问题,或者一些其他的复杂算法(如逻辑回归算法)。

    **正规方程法:**适用于:特征变量数量小于一万的线性回归算法。

  • 所以,根据具体的问题,以及你的特征变量的数量,这两种算法都是值得学习的。

正规方程的python实现:

import numpy as np
    
 def normalEqn(X, y):
    
   theta = np.linalg.inv(X.T@X)@X.T@y #X.T@X等价于X.T.dot(X)
    
   return theta

4.4.4 正规方程的不可逆性(可选)

在这段视频中谈谈正规方程 ( normal equation ),以及它们的不可逆性。 由于这是一种较为深入的概念,并且总有人问我有关这方面的问题,因此,我想在这里来讨论它,由于概念较为深入,所以对这段可选材料大家放轻松吧,也许你可能会深入地探索下去,并且会觉得理解以后会非常有用。但即使你没有理解正规方程和线性回归的关系,也没有关系。

我们要讲的问题如下: θ = ( X T X ) − 1 X T y \theta ={{\left( {X^{T}}X \right)}^{-1}}{X^{T}}y θ=(XTX)1XTy

备注:本节最后我把推导过程写下。

有些同学曾经问过我,当计算 θ \theta θ=inv(X'X ) X'y ,那对于矩阵 X ′ X X'X XX的结果是不可逆的情况咋办呢? 如果你懂一点线性代数的知识,你或许会知道,有些矩阵可逆,而有些矩阵不可逆。我们称那些不可逆矩阵为奇异或退化矩阵。 问题的重点在于 X ′ X X'X XX的不可逆的问题很少发生,在Octave里,如果你用它来实现 θ \theta θ的计算,你将会得到一个正常的解。在Octave里,有两个函数可以求解矩阵的逆,一个被称为pinv(),另一个是inv(),这两者之间的差异是些许计算过程上的,一个是所谓的伪逆,另一个被称为逆。使用pinv() 函数可以展现数学上的过程,这将计算出 θ \theta θ的值,即便矩阵 X ′ X X'X XX是不可逆的。

pinv()inv() 之间,又有哪些具体区别呢 ?

其中inv() 引入了先进的数值计算的概念。例如,在预测住房价格时,如果 x 1 {x_{1}} x1是以英尺为尺寸规格计算的房子, x 2 {x_{2}} x2是以平方米为尺寸规格计算的房子,同时,你也知道1米等于3.28英尺 ( 四舍五入到两位小数 ),这样,你的这两个特征值将始终满足约束: x 1 = x 2 ∗ ( 3.28 ) 2 {x_{1}}={x_{2}}*{{\left( 3.28 \right)}^{2}} x1=x2(3.28)2。 实际上,你可以用这样的一个线性方程,来展示那两个相关联的特征值,矩阵 X ′ X X'X XX将是不可逆的。

第二个原因是,在你想用大量的特征值,尝试实践你的学习算法的时候,可能会导致矩阵 X ′ X X'X XX的结果是不可逆的。 具体地说,在 m m m小于或等于n的时候,例如,有 m m m等于10个的训练样本也有 n n n等于100的特征数量。要找到适合的 ( n + 1 ) (n +1) (n+1) 维参数矢量 θ \theta θ,这将会变成一个101维的矢量,尝试从10个训练样本中找到满足101个参数的值,这工作可能会让你花上一阵子时间,但这并不总是一个好主意。因为,正如我们所看到你只有10个样本,以适应这100或101个参数,数据还是有些少。

稍后我们将看到,如何使用小数据样本以得到这100或101个参数,通常,我们会使用一种叫做正则化的线性代数方法,通过删除某些特征或者是使用某些技术,来解决当 m m m n n n小的时候的问题。即使你有一个相对较小的训练集,也可使用很多的特征来找到很多合适的参数。 总之当你发现的矩阵 X ′ X X'X XX的结果是奇异矩阵,或者找到的其它矩阵是不可逆的,我会建议你这么做。

首先,看特征值里是否有一些多余的特征,像这些 x 1 {x_{1}} x1 x 2 {x_{2}} x2是线性相关的,互为线性函数。同时,当有一些多余的特征时,可以删除这两个重复特征里的其中一个,无须两个特征同时保留,将解决不可逆性的问题。因此,首先应该通过观察所有特征检查是否有多余的特征,如果有多余的就删除掉,直到他们不再是多余的为止,如果特征数量实在太多,我会删除些 用较少的特征来反映尽可能多内容,否则我会考虑使用正规化方法。 如果矩阵 X ′ X X'X XX是不可逆的,(通常来说,不会出现这种情况),如果在Octave里,可以用伪逆函数pinv() 来实现。这种使用不同的线性代数库的方法被称为伪逆。即使 X ′ X X'X XX的结果是不可逆的,但算法执行的流程是正确的。总之,出现不可逆矩阵的情况极少发生,所以在大多数实现线性回归中,出现不可逆的问题不应该过多的关注 X T X {X^{T}}X XTX是不可逆的。

你可能感兴趣的:(机器学习)