第五章 多变量线性回归

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 的时候,即,具有了很多的特征 解决:减少特征参数或者使用一个叫“正则化”的方法

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券