《机器学习》学习笔记2:多变量线性回归

Week2 多变量线性回归
基于吴恩达《机器学习》课程
参考黄海广的笔记
本篇博客为第二周的内容。


4 多变量线性回归(Linear Regression with Multiple Variables)

4.1 新增变量表示

讲义中的向量默认为列向量。

n n n 代表特征的数量,即特征列数

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

x j {x}_{j} xj代表第 j j j 个特征,是特征矩阵中的第 j j j 列,是一个向量。

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

多变量的假设函数(引入 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

此时模型中的参数 θ \theta θ和任何一个训练实例 x ( i ) {x^{\left( i \right)}} x(i)都是 n + 1 n+1 n+1维的向量,特征矩阵 X T = [ x 0 . . . x n ] X^{T}=\begin{bmatrix} {x_{0}} & ...&{x_{n}} \end{bmatrix} XT=[x0...xn],维度是 m ∗ ( n + 1 ) m*(n+1) m(n+1)

因此公式可以简化为( T T T代表转置):

h θ ( x ) = θ T X = X T θ = [ x 0 ( 1 ) . . . x n ( 1 ) . . . . . . . . . x 0 ( m ) . . . x n ( m ) ] [ θ 0 . . . θ n ] h_{\theta} \left( x \right)={\theta^{T}}X=X^T{\theta}=\left[ \begin{array} {ccc} {x}_{0}^{\left( 1 \right)} & ... & {x}_{n}^{\left( 1 \right)}\\ ... & ... & ...\\ {x}_{0}^{\left( m \right)} & ... & {x}_{n}^{\left( m \right)}\\ \end{array} \right]\begin{bmatrix} {\theta_{0}} \\...\\{\theta_{n}} \end{bmatrix} hθ(x)=θTX=XTθ=x0(1)...x0(m).........xn(1)...xn(m)θ0...θn

4.2 多变量梯度下降

代价函数: J ( θ ) = J ( θ 0 , θ 1 . . . θ n ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J (\theta)=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(θ)=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

使用多变量梯度下降:

θ j : = θ j − α ∂ ∂ θ j J ( θ ) : = θ j − α ∂ ∂ θ j 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 {\theta_{j}}:={\theta_{j}}-\alpha \frac{\partial }{\partial {\theta_{j}}}J ( \theta) :={\theta_{j}}-\alpha \frac{\partial }{\partial {\theta_{j}}}\frac{1}{2m}\sum\limits_{i=1}^{m}{{{\left( h_{\theta} \left({x}^{\left( i \right)} \right)-{y}^{\left( i \right)} \right)}^{2}}} θj:=θjαθjJ(θ):=θjαθj2m1i=1m(hθ(x(i))y(i))2

J ( θ ) J (\theta) J(θ)求偏导后可得:

**Repeat ** until convergence {

θ j : = θ j − a 1 m ∑ i = 1 m ( ( h θ ( x ( i ) ) − y ( i ) ) ⋅ x j ( i ) ) {\theta_{j}}:={\theta_{j}}-a\frac{1}{m}\sum\limits_{i=1}^{m}{\left( \left({{h}_{\theta }}({{x}^{(i)}})-{{y}^{(i)}} \right)\cdot {{x}_j^{(i)}} \right)} θj:=θjam1i=1m((hθ(x(i))y(i))xj(i))

}

每次要同时更新 θ 0 {\theta_{0}} θ0 θ n {\theta_{n}} θn

4.3 梯度下降实践技巧:特征缩放

为了让梯度下降算法能更快地收敛,将所有特征的尺度都尽量缩放到-1到1之间。经验:其他的要到-3~3、-1/3~1/3之间。

最简单的方法是均值归一化 :除 x 0 = 1 x_0=1 x0=1外, x n = x n − μ n s n {{x}_{n}}=\frac{{{x}_{n}}-{{\mu}_{n}}}{{{s}_{n}}} xn=snxnμn

其中 μ n {\mu_{n}} μn x n x_n xn的平均值, s n {s_{n}} sn是标准差。

s n {s_{n}} sn也可以用特征值的取值范围 r a n g e ( m a x − m i n ) range(max-min) range(maxmin)代替,近似缩放即可,目的只是让梯度下降更快,不需要太精确。

4.4 梯度下降实践技巧:选取学习率 α \alpha α

如果学习率 α \alpha α过小,则迭代次数会很高;如果 α \alpha α过大,可能会越过局部最小值导致无法收敛。

可以通过绘制不同 α \alpha α迭代次数 - 代价函数 的图表来观测算法在何时趋于收敛,从而选择合适的 α \alpha α

通常可以考虑尝试些学习率:

α = 0.01 , 0.03 , 0.1 , 0.3 , 1 , 3 , 10 \alpha=0.01,0.03,0.1,0.3,1,3,10 α=0.010.030.10.31310

也有自动测试是否收敛的方法,例如将代价函数每次迭代的变化值与某个阀值$ \varepsilon$(如0.001)进行比较,但是阀值不好选,通常还是画图更好。

4.5 选取特征与多项式回归

有时候定义新特征 可能得到更好的模型,例如两个已知特征长和宽,我们可以定义面积为新特征。

线性回归并不适用于所有数据,有时我们需要曲线 来适应我们的数据,通常我们需要先观察数据然后再决定准备尝试怎样的模型(后续会介绍自动选择模型的算法)。

比如三次方模型: h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 2 + θ 3 x 3 3 h_{\theta}\left( x \right)={\theta_{0}}+{\theta_{1}}{x_{1}}+{\theta_{2}}{x_{2}^2}+{\theta_{3}}{x_{3}^3} hθ(x)=θ0+θ1x1+θ2x22+θ3x33

或者: 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

另外,我们可以令: x 2 = x 2 2 , x 3 = x 3 3 {{x}_{2}}=x_{2}^{2},{{x}_{3}}=x_{3}^{3} x2=x22,x3=x33,从而将模型转化为线性回归模型。

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

4.6 正规方程

正规方程就是通过算偏导 ∂ ∂ θ 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 代表矩阵的逆。

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

梯度下降 正规方程
可能需要特征缩放 无需特征缩放
需要选择学习率 α \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<10000 $时还是可以接受的
适用于各种类型的模型 只适用于线性模型,不适合逻辑回归模型等其他模型

对于那些不可逆的矩阵(奇异或退化矩阵),正规方程方法是不能用的。

一般不可逆情况少见,而且在Octave 里,求逆函数一个为pinv(),另一个是inv(),前者使求的伪逆,不可逆矩阵也能得到,后者被称为逆。大多数情况不用关注是否可逆。

常见的不可逆情况有:

  1. 有多余的特征,与其他特征互为线性函数。

  2. 特征过多, m ≤ n m≤n mn

首先应该通过观察检查是否有多余的特征,有就删掉。如果特征数量太多,就删除些用较少的特征,或者考虑使用正规化方法(后面会讲)。

4.7 正规方程推导过程

此处用到以下几个矩阵的求导法则 :

d A B d B = A T \frac{dAB}{dB}={{A}^{T}} dBdAB=AT d X T A X d X = 2 A X \frac{d{{X}^{T}}AX}{dX}=2AX dXdXTAX=2AX

代价函数: J ( θ ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J\left( \theta \right)=\frac{1}{2m}\sum\limits_{i=1}^{m}{{{\left( {h_{\theta}}\left( {x^{(i)}} \right)-{y^{(i)}} \right)}^{2}}} J(θ)=2m1i=1m(hθ(x(i))y(i))2

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

将向量表达形式转为矩阵表达形式,则有: J ( θ ) = 1 2 ( X θ − y ) 2 J(\theta )=\frac{1}{2}{{\left( X\theta -y\right)}^{2}} J(θ)=21(Xθy)2

其中 X X X m m m n + 1 n+1 n+1列的矩阵( m m m为样本个数, n n n为特征个数), θ \theta θ n + 1 n+1 n+1行1列的矩阵, y y y m m m行1列的矩阵。

J ( θ ) = 1 2 ( X θ − y ) T ( X θ − y ) J(\theta )=\frac{1}{2}{{\left( X\theta -y\right)}^{T}}\left( X\theta -y \right) J(θ)=21(Xθy)T(Xθy) = 1 2 ( θ T X T − y T ) ( X θ − y ) =\frac{1}{2}\left( {{\theta }^{T}}{{X}^{T}}-{{y}^{T}} \right)\left(X\theta -y \right) =21(θTXTyT)(Xθy)

     = 1 2 ( θ T X T X θ − θ T X T y − y T X θ − y T y ) =\frac{1}{2}\left( {{\theta }^{T}}{{X}^{T}}X\theta -{{\theta}^{T}}{{X}^{T}}y-{{y}^{T}}X\theta -{{y}^{T}}y \right) =21(θTXTXθθTXTyyTXθyTy)

所以有:

∂ J ( θ ) ∂ θ = 1 2 ( 2 X T X θ − X T y − ( y T X ) T − 0 ) \frac{\partial J\left( \theta \right)}{\partial \theta }=\frac{1}{2}\left(2{{X}^{T}}X\theta -{{X}^{T}}y -{}({{y}^{T}}X )^{T}-0 \right) θJ(θ)=21(2XTXθXTy(yTX)T0)

= 1 2 ( 2 X T X θ − X T y − X T y ) =\frac{1}{2}\left(2{{X}^{T}}X\theta -{{X}^{T}}y -{{X}^{T}}y \right) =21(2XTXθXTyXTy)

= X T X θ − X T y ={{X}^{T}}X\theta -{{X}^{T}}y =XTXθXTy

∂ J ( θ ) ∂ θ = 0 \frac{\partial J\left( \theta \right)}{\partial \theta }=0 θJ(θ)=0,

则有: θ = ( X T X ) − 1 X T y \theta ={{\left( {X^{T}}X \right)}^{-1}}{X^{T}}y θ=(XTX)1XTy

你可能感兴趣的:(机器学习,Python与AI,机器学习,线性代数,sklearn,人工智能)