week4

4.1 多维特征

多变量模型,模型中特征为( x 1 , x 2 , x 3 , . . . , x n x_1,x_2,x_3,...,x_n x1​,x2​,x3​,...,xn​​)

week4

其中,

n代表特征数量

x ( i ) x^{(i)} x(i)代表第i个训练实例,是特征矩阵的第i行,是一个向量

比如说,上图的
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^{(i)} xj(i)​代表第i行第j个特征

支持多变量的假设 h h h表示为: h 0 ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 + ⋯ + θ n x n h_0(x)=\theta_0+\theta_1x_1+\theta_2x_2+\cdots+\theta_nx_n h0​(x)=θ0​+θ1​x1​+θ2​x2​+⋯+θn​xn​

这个公式有 n + 1 n+1 n+1个参数和 n n n个变量,为了使公式简化,引入 x 0 = 1 x_0 = 1 x0​=1,则公式转换为: h 0 ( x ) = θ 0 x 0 + θ 1 x 1 + θ 2 x 2 + ⋯ + θ n x n h_0(x) = \theta_0x_0 + \theta_1x_1 + \theta_2x_2+\cdots+\theta_nx_n h0​(x)=θ0​x0​+θ1​x1​+θ2​x2​+⋯+θn​xn​

此时模型中的参数是一个 n + 1 n+1 n+1​维向量,任何一个训练实例也是 n + 1 n+1 n+1​维向量,特征矩阵 X X X​的维度是 m ∗ ( m + 1 ) m*(m+1) m∗(m+1)​。因此公式可以简化为: h θ ( x ) = θ T X h_\theta \left(x\right) = \theta^TX hθ​(x)=θTX​,其中上标T代表矩阵转置

4.2 多元梯度下降

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

其中: h θ ( x ) = θ T X = θ 0 + θ 1 x 1 + ⋯ + θ n x n h_\theta(x) = \theta^TX = \theta_0 + \theta_1x_1+\cdots+\theta_nx_n hθ​(x)=θTX=θ0​+θ1​x1​+⋯+θn​xn​

多变量线性回归批量梯度下降算法为:

当 j = 0 , 1 , ⋯   , n j=0,1,\cdots,n j=0,1,⋯,n​时,$\theta_j = \theta_j - \alpha\frac{1}{m}\sum\limits_{i=1}m(h_\theta(x{(i)})-y{(i)})x_\theta{(i)} $​

4.3 梯度下降法实践1-特征缩放

尝试将所有特征的尺度都尽量缩放到-1到1之间

week4

最简单的方法是: x n = x 0 − μ n s n x_n = \frac{x_0-\mu_n}{s_n} xn​=sn​x0​−μn​​,其中 μ n \mu_n μn​是平均值, s n s_n sn​是标准差

4.4 梯度下降法实践2-学习率

梯度下降算法收敛所需要的迭代次数根据模型的不同而不同,我们不能提前预知,我们可以绘制迭代次数和代价函数的图表来观测算法在何时趋于收敛。

week4

梯度下降算法的每次迭代受到学习率 α \alpha α的影响,如果学习率 α \alpha α过小,则达到收敛所需的迭代次数会非常高;如果学习率 α \alpha α​过大,每次迭代可能不会减小代价函数,可能会越过局部最小值导致无法收敛。

4.5 特征和多项式回归

房价预测问题,

week4

h θ ( x ) = θ 0 + θ 1 × f r o n t a g e + θ 2 × d e p t h h_\theta(x) = \theta_0 + \theta_1 \times frontage + \theta_2 \times depth hθ​(x)=θ0​+θ1​×frontage+θ2​×depth

x 1 = f r o n t a g e x_1 = frontage x1​=frontage x 2 = d e p t h x_2 = depth x2​=depth ,可以使用特征 x = f r o n t a g e × d e p t h x = frontage \times depth x=frontage×depth ,则 h θ = θ 0 + θ 1 x h_\theta = \theta_0 + \theta_1x hθ​=θ0​+θ1​x, 线性回归并不适用于所有数据,有时我们需要曲线来适应数据,比如二次方模型: h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 2 h_\theta(x) = \theta_0 + \theta_1x_1 + \theta_2x_2^2 hθ​(x)=θ0​+θ1​x1​+θ2​x22​ 或者三次方模型: h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 2 + θ 3 x 3 3 h_\theta(x) = \theta_0 + \theta_1x_1 + \theta_2x_2^2 + \theta_3x_3^3 hθ​(x)=θ0​+θ1​x1​+θ2​x22​+θ3​x33​

week4

另外,可以令:

x 2 = x 2 2 x_2 = x_2^2 x2​=x22​ x 3 = x 3 3 x_3=x_3^3 x3​=x33​, 从而将模型转换为线性回归模型。

根据函数图形特征,还可以使:

h θ ( x ) = θ 0 + θ 1 ( s i z e ) + θ 2 ( s i z e ) 2 h_\theta(x)=\theta_0+\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+\theta_1(size)+\theta_2\sqrt{size} hθ​(x)=θ0​+θ1​(size)+θ2​size

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

4.6 正规方程

对于某些线性回归问题,正规方程方法是更好的解决方案。如:

week4

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

week4

即:

week4

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

week4

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

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

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

总结一下,只要特征变量的数目并不大,标准方程是一个很好的计算参数的替代方法。具体地说,只要特征变量数量小于一万,我通常使用标准方程法,而不使用梯度下降法。

随着我们要讲的学习算法越来越复杂,例如,当我们讲到分类算法,像逻辑回归算法,我们会看到,实际上对于那些算法,并不能使用标准方程法。对于那些更复杂的学习算法,我们将不得不仍然使用梯度下降法。因此,梯度下降法是一个非常有用的算法,可以用在有大量特征变量的线性回归问题。或者我们以后在课程中,会讲到的一些其他的算法,因为标准方程法不适合或者不能用在它们上。但对于这个特定的线性回归模型,标准方程法是一个比梯度下降法更快的替代算法。所以,根据具体的问题,以及你的特征变量的数量,这两种算法都是值得学习的。

正规方程的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.7 正规方程及不可逆性(可选)

不可逆原因:

  1. 特征线性相关
  2. 样本数m小于特征数n
上一篇:Andrew Ng机器学习--L7:正则化


下一篇:2021-10-22 MATLAB水平拼接两幅图