第五章 多变量线性回归

作者: tomas家的小拨浪鼓 | 来源:发表于2019-02-24 20:12 被阅读5次

    该系列文章为,观看“吴恩达机器学习”系列视频的学习笔记。虽然每个视频都很简单,但不得不说每一句都非常的简洁扼要,浅显易懂。非常适合我这样的小白入门。

    本章含盖

    • 5.1多维特征
    • 5.2 多元梯度下降法
    • 5.3 多元梯度下降法演练!—— 特征缩放
    • 5.4 多元梯度下降法 —— 学习率
    • 5.5 特征和多项式回归
    • 5.6 正规方程(区别于迭代方法的直接解法)
    • 5.7 正规方程在矩阵不可逆情况下的解决方法

    5.1多维特征

    n :特征量的数目
    x^(i) :第 i 个训练样本的输入特性值
    x^(i)_j :第 i 个训练样本中第 j 个特征量的值

    • 新的假设函数公式:

      为了方便标记,我们定义 x_0 为 1,也就是说在已有的 n 个特征外,我们额外增加了一个 x_0 特性,但这个 x_0 总是为 1 。
      所以我们的特征向量是一个从0开始标记的 n+1 维的向量。


      1 x m 矩阵,也称为 行矩阵
      参数向量 与 特征向量 的内积

      『 一个行向量乘以一个列向量称作向量的内积,又叫作点积,结果是一个数 』

    因此,假设函数 h_θ(x) = θ_0*x_0 + θ_1*x_1 + θ_2*x_2 + … + θ_n*x_n
    可以简化为 h_θ(x) = θ^T * X
    👆 多元线性回归

    5.2 多元梯度下降法

    我们不将θ_0 … θ_1 看做一个个独立的参数(虽然也是可以的),而是考虑将这些参数看做一个 n+1 维的Θ向量
    不把 J 看做一个 n+1 个数的函数,我们会使用更通用的方式把 J 写成参数Θ这个向量的函数
    • 当 n = 1 时
    • 当 n > 1 时
    举例,n = 2 时,(为了说明,n =1 和 n > 1 时,梯度下降法的思路是类似的)

    5.3 多元梯度下降法演练!—— 特征缩放

    不同的特征向量值,在相近的范围内。这样梯度下降法就能更快的收敛

    • eg:
      特征1 —— x1 为房屋的大小(0 ~ 2000)
      特征2 —— x2 为房间数 (1~5)
      如果 x1 和 x2 的值差的很多,那么 代价函数J(Θ) 的等高线图就会是非常歪斜且椭圆的形状。其实 2000 比 5 的比例会让这个椭圆更加瘦长。
      如果你再这种代价函数(非常歪斜且椭圆的代价函数J(Θ))上运行梯度下降的话,你的梯度最终可能需要花很长一段时间,并且可能会来回波动。然后会经过很长时间最终才收敛到全局最小值

    个人理解:【如果 x1 和 x2 的值差的很多,那么 代价函数J(Θ) 的等高线图就会是非常歪斜且椭圆的形状】这句话可以这么理解:

    如下图所示。你看最外层的等高线,也就是代价函数误差最大的时候,当 x1 的值范围 远大于 x2 值的时候。当 θ2 取同一个值时,θ1只需要改变很小的值,就能得到一样误差很大的等高线。因为,x1 太大了,J(Θ) = θ_0 + θ_1 * x1 + θ_2 * x2 - y 的值一下就大了(即使 θ1改变的很小)。而当 x1 与 x2 在近视范围中的时候。等高线图看起来更加的“圆”。

    如果,这个等值线图更细更长,结果就是梯度下降的过程可能更加缓慢,反复来回震荡,需要更长的时间才找到一条通往全局最小值的路。

    个人理解:因为,如👇等值线越细长,J(Θ1)的导数会比较大(可以理解为,每次 Θ1 的改变较大,Θ2 的改变较小),因此会导致梯度下降的过程是一个左右斜率很低的振荡路线)。所以就可能导致来回波动,导致要经过更长的时间才可以收敛到全局最小值

    特征缩放

    有两种常见的特征缩放

    • 将特征除以最大值
    • 均值归一化
    将特征除以最大值

    在这样的情况下,一种有效的方法是进行特征缩放。
    把特征 x1 定位为,房子的面积大小除以2000。并且把 x2 定义为,卧室的数量除以5.

    那么代价函数的等值线就会变得偏移没那么严重。(看起来更圆了) 你可以通过数学来证明,就会找到一条更直接的路径,通往全局最小值。(即,梯度下降法能够更快的收敛)

    所以,通过这种特征缩放,它们的值的范围变得更相近。

    更一般的,我们执行特征缩放时,我们通常的目的是将特征的取值约束到 -1 到 +1 的范围内。
    特性 x0 总是等于 1.


    x1 和 x2 虽然不在 -1 ~ +1 之间,但是它们很靠近这个范围,所以是ok 的。(这里说的约等于 -1 <= xi <= 1 访问,指的是,最小值靠近与 -1,最大值靠近与 +1)
    而 x3 显然不符合;x4 也是如此。
    经验:如果一个特征是在 -3 到 +3 的范围内,这个范围是可以接受的。
    -1/3 ~ 1/3 、0 ~ 1/3 、-1/3 ~ 0 也是可以接受的。
    👆这些是典型的范围

    均值归一化

    除了,将特征除以最大值以外,在特征缩放中,有时候我们也会进行一个称为“均值归一化”的工作

    如果你有一个特征 x_i ,你就用 x_i - u_i 来替换,让你的特征具有为近似 0 的平均值。我们不需要将这引用于 x_0 ,因为它总是为 1,所以它不可能有为0的平均值。
    u_i 为特征值 x_i 的平均值。
    均值归一化后的结果,会使得 x_i 的范围靠近 -0.5 ~ +0.5
    u_i :训练集中特征 x_i 的平均值
    s_i :就是特征值的范围(即,最大值 - 最小值 ,也称作’标准差’)

    均值归一化的运算并不需要太精确,它只是为了让梯度下降能够运行的更快一点而已。

    5.4 多元梯度下降法 —— 学习率

    横轴为 梯度下降法迭代的次数

    如果梯度下降正常工作,那么每一步迭代后 J(Θ) 都应该下降
    通过这条曲线可以帮助你判断,梯度下降法是否已经收敛。
    对于每个特定的问题,梯度下降算法所需的迭代次数可能相差会很大。实际上,我们很难预算梯度下降算法需要多少步迭代才能收敛。我们通常画出👆这样的曲线,来判断梯度下降算法是否已经收敛。

    另外,也可以进行一些自动的收敛测试。也就是说,用一种算法来告诉你梯度下降法是否已经收敛。这里👇是自动收敛测试的一个典型例子

    但是,我发现,通常要选择一个适合的阈值 ε 是相当困难的。所以,实际上,更倾向于通过看第一种的曲线图。 通过看这个曲线图还可以提前警告你算法没有正常工作(如下👇)

    👆通常这样的曲线图通常意味着你应该使用较小的学习率 α

    👆通常这样的曲线图通常也意味着你应该使用较小的学习率 α

    • For sufficiently small α,J(Θ) should decrease on every iteration.
    • But if α is too small,gradient descent can be slow to converge.
      👆两个结论适用于“线性函数”,因为线性函数只有一个局部最优解,即全局最优解
    • 总结

      每隔 10 倍取一个值。
      根据每隔 α 值,我们都绘制一个 J(Θ) 同 迭代次数的曲线图,然后根据曲线图选择一个最合适的 α 值。

    经验:α 值之间间隔为3倍(而非10倍)

    5.5 特征和多项式回归

    与选择特征的想法密切相关的一个概念,被称为多项式回归。

    那么我们如何将模型与数据进行拟合了?

    使用多元线性回归的方法,我们可以对算法做一个简单的修改来实现它


    为了将 h_θ(x) = θ_0 + θ_1 * x_1 + θ_2 * x_2 + θ_3 * x_3 与 “θ_0 + θ_1 * x + θ_2 * x^2 + θ_3 * x^3” 对应起来。
    特征向量 x_1 为 房屋面积
    特征向量 x_2 为 房屋面积的平方
    特征向量 x_3 为 房屋面积的立方

    然后再应用线性回归的方法,我们就可以拟合这个模型。
    注意,如果你像👆这样选择特征,那么特征缩放就变得更重要了

    • 特征选择:

      二次函数不合理的地方在于,存在一个最高点之后y值会慢慢下降(因为,如图所见,这里的 θ_2 是一个负数,所以 θ_2*(size)^2 存在一个最高点),我们不认为随着房屋面积的增大,房屋价格会降下。
      除了选择用三次函数外,我们还可以选择用平方根函数,基于我我们对平方根函数的了解(到一定值之后会缓慢提升)

    5.6 正规方程(区别于迭代方法的直接解法)

    对于某些线性回归问题,它会给我们更好的方法,来求得参数Θ的最优值。

    目前为止,我们一直使用的线性回归算法是“梯度下降法”。

    正规方程法

    直观理解
    1. J 是 Θ 的一个函数,Θ 为实数:

      最小化一个函数的方式,是对它求导,并将导数置0。

    因为,导数就是函数曲线的斜率,当导数为 0 的时候,说明是斜率水平与 x 轴,也就是曲线在最低点的时候。

    1. 当 Θ 不是实数时,而是一个 n+1 维的参数向量:

      我们如何最小化代价函数了?微积分的知识告诉我们,逐个对对象参数 Θ_j 求 J 的偏导数,然后把它们全部置零,求出 Θ_0、Θ_1、…、Θ_n 的值,这样就能得到能够最小化代价函数 J 的 Θ 值。

    而这样的微积分最终可能很复杂。实际上接下来要讲的算法,可以不用计算所有的Θ的导数,也可以求得 J 的最优解。。。

    举例

    X 是 m * (n+1) 维矩阵,y 是一个 m 维向量
    m :样本数
    n :特征变量数

    这个求得的 Θ 即为 使得代价函数最小化的 Θ。

    如果你使用“正规方程法”,那么就不需要特征缩放。(梯度下降算法,需要特征缩放,让特征值靠近一个区间范围)

    梯度下降算法 VS 正规方程法

    实现逆矩阵计算( (X^T * X)^-1 )的代价,以矩阵维度的三次方增长。即 O(n^3)。
    所以,如果 n 很大,我们可能还是会使用梯度下降法。

    那么什么是大,什么是小了?
    若 n 是百位数级别,或千位数级别,现代计算机对其计算逆矩阵算法还是很快的。
    若 n 是万级别的,可能有用“正规方程法”就会比较慢了,此时可能会倾向于使用梯度下降法。万级别是一个中间级别,可以都试试看。。。
    若 n 远大于万级别,我们可能就会使用梯度下降法了。如,一个百万级别个数的特征量
    经验:当 n 在一万左右,会考虑换成“梯度下降法”或其他算法。

    关于复杂的学习算法,如,分类算法,logistic回归算法,正规方程法不适用于这些复杂的学习算法,我们将不得不仍然使用梯度下降法。

    5.7 正规方程在矩阵不可逆情况下的解决方法

    我们称那些不可逆矩阵为 奇异或退化矩阵。

    如果 X^T*X 不可逆,通常有两种最常见的原因:
    1. 如果由于某些原因,你的学习问题中包含了多余的特征。
      如,两个特征,x1 是为单位为英尺的面积;x2是单位为米的面积
      这样 x1 = (3.28)^2 * x2 。👈这样 x1 与 x2 就互为线性函数了!!

    👆这种情况,X 的‘行列式’为0 (|X|=0)。X 不可逆

    1. 在 m < n 的时候,即,具有了很多的特征
      解决:减少特征参数或者使用一个叫“正则化”的方法

    “正则化”可以让你使用很多的特征来配置很多参数,即使你有一个相对较小的训练集。

    相关文章

      网友评论

        本文标题:第五章 多变量线性回归

        本文链接:https://www.haomeiwen.com/subject/korbyqtx.html