多变量线性回归
多维特征(Multiple Features)
前面讲过单变量(只有一维特征)的输出函数 h(x) 可以表示为:h(x) = θ0 + θ1x 。对于多维特征而言,其输出函数 h(x) 可以表示为:h(x) = θ0 + θ1x1 + θ2x2 + … + + θnxn。这里为了让公式简单一点,就令x0 = 1,这样 h(x) 就可以表示为:h(x) = θ0x0 + θ1x1 + θ2x2 + … + + θnxn。xn表示特征向量值。
举例:
上图的特征:
x0: 房子的面积
x1: 有几个卧室
x2: 有几层
等等。
x(i) 代表第 i 组训练实例,是特征矩阵中的第i行,是一个向量(vector)。比如:
此时模型中的参数是一个 n+1 维的向量,任何一个训练实例也都是 n+1 维的向量,特征矩阵 X 的维度是 m*(n+1) [m: 有多少组训练集] 。 因此公式可以简化为:h(x) = θTX,其中上标 T 代表矩阵转置。
多变量梯度下降实现
前面讲到单变量的损失函数如下表示:
对于多变量的损失函数而言,可用如下公式表示:
对比两个公式,其实本质是一样的。我们的目的就是要找到一组 θn,使得 J 函数最小,那就是要对各个 θi 求偏导。
梯度下降算法过程如下:
对比之前的单变量线性回归模型的梯度算法,如下
梯度下降算法实用技巧:特征缩放
原则:确保特征向量值都在一个很相近的范围内。
课程讲的方法本质上是要把特征向量归一化到 [-1,1] 间。讲了好几种,但是最常见用z-score归一化公式:xn = (xn - μn) / Sn。这里的μn是期望,Sn是标准差。
特征缩放有个好处,可以加快梯度下降算法收敛,因为 θ 调整范围小[-1,1],而不是在一个较大的范围内调整。
举例子:下图左边是没有归一化的, θ 调整范围很大,收敛路径向走之路线,走得也很长,而右边 θ 调整范围就是在[0,1]间,很容易收敛到中心位置。
梯度下降算法实用技巧:学习率
梯度下降算法收敛所需要的迭代次数根据模型的不同而不同,我们不能提前预知,我们一般是绘制迭代次数和代价函数的图表来观测算法在何时趋于收敛,tensorflow 本身就有专门的工具。
梯度下降算法的每次迭代受到学习率的影响:
- 如果学习率 α 过小,则达到收敛所需的迭代次数会非常高;
- 如果学习率 α 过大,每次迭代可能不会减小损失函数,可能会越过局部最小值导致无法收敛。
通常可以尝试的学习率 α =0.01,0.03,0.1,0.3,1,3,10
特征和多项式回归
很多时候,当发现无法线性回归模型拟合我们的数据,我们可以使得我们的输出函数是一个二次函数、立方函数、平方根函数或其它任何形式的函数来改变我们的 h(x) 的行为或曲线。
比如:
但是不管你用哪一种,都需要对特征变量归一化。
正规方程求解 θ
梯度下降法给了一种最小化 J(θ) 的方法;还有另外一种方法叫“正规方程”,它是明确通过计算直接求最小化,而不是通过迭代算法,简而言之,就是通过对 J(θ) 求导,使其关于 θ 的导数为 0,计算出:θ = (XTX)-1XTy;这个公式的推导参考:正规方程的推导过程
那么我们实际过程中是使用梯度下降法还是正规方程呢?先来看看他的对比:
一般来说当特征集很多时或者 h(x) 很复杂时,推荐用梯度下降法,反之,特征集小或者 h(x) 是线性方程时,用正规方程要简单一下。
参考: