吴恩达机器学习-2-梯度下降与正规方程

吴恩达机器学习-2-梯度下降与正规方程

第二周主要讲解的内容包含:

  • 多维特征
  • 多变量梯度下降
  • 梯度下降法实践
  • 正规方程

多维特征Multiple Features

还是利用房价模型的例子,增加了更多的特征,比如:房间楼层、房间数量、地理位置等,构成了一个含有多个变量的模型

n:代表的是特征的数量

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

xj(i)x^{(i)}_{j}:表示的是第ii个训练实例的第jj个特征;i表示行,j表示列

支持多变量的假设hh表示为: hθ(x)=θ0+θ1x1++θnxnh_{\theta}(x)=\theta_0+\theta_1x_1+…+\theta_nx_n 为了简化公式,引入x0=1x_0=1,公式转化为: hθ(x)=θ0x0+θ1x1++θnxnh_{\theta}(x)=\theta_0x_0+\theta_1x_1+…+\theta_nx_n 特征矩阵X 的维度是m(n+1)m*(n+1),公式简化为: hθ(x)=θTXh_{\theta}{(x)}=\theta^{T}X


多变量梯度下降

算法目标

与单变量线性回归类似,在多变量线性回归中,构建一个代价函数,则这个代价函数是所有建模误差的平方和,即:

J(θ0,θ1...θn)=12mi=1m(hθ(x(i))y(i))2J\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}}}

其中:

hθ(x)=θTX=θ0+θ1x1+θ2x2+...+θnxnh_{\theta}\left( x \right)=\theta^{T}X={\theta_{0}}+{\theta_{1}}{x_{1}}+{\theta_{2}}{x_{2}}+…+{\theta_{n}}{x_{n}}

算法过程

原始形式: θj:=θjαJ(θ0,θ1,...,θn)θj\theta_j:=\theta_j-\alpha \frac {\partial J(\theta_0,\theta_1,…,\theta_n)}{\partial \theta_j}

将代价函数JJ带进去: θj:=θj12mαi=1m(hθ(x(i))y(i))2θj\theta_j:=\theta_j-\frac{1}{2m} \alpha \frac {\partial \sum^m_{i=1}(h_{\theta}(x^{(i)})-y^{(i)})^2}{\partial \theta_j}

求导数之后: θj:=θj1mαi=1m((hθ(x(i))y(i))xj(i)\theta_j:=\theta_j-\frac{1}{m} \alpha \sum^m_{i=1}((h_{\theta}(x^{(i)})-y^{(i)})\cdot x_j^{(i)} 其中j(0,1,2,,n)j\in{(0,1,2,…,n)}

n>=1n>=1时, θ0:=θ0a1mi=1m(hθ(x(i))y(i))x0(i){{\theta }_{0}}:={{\theta }_{0}}-a\frac{1}{m}\sum\limits_{i=1}^{m}{({{h}_{\theta }}({{x}^{(i)}})-{{y}^{(i)}})}x_{0}^{(i)}

θ1:=θ1a1mi=1m(hθ(x(i))y(i))x1(i){{\theta }_{1}}:={{\theta }_{1}}-a\frac{1}{m}\sum\limits_{i=1}^{m}{({{h}_{\theta }}({{x}^{(i)}})-{{y}^{(i)}})}x_{1}^{(i)}

θ2:=θ2a1mi=1m(hθ(x(i))y(i))x2(i){{\theta }_{2}}:={{\theta }_{2}}-a\frac{1}{m}\sum\limits_{i=1}^{m}{({{h}_{\theta }}({{x}^{(i)}})-{{y}^{(i)}})}x_{2}^{(i)}

Python代码

给定特征矩阵X,输出y,学习率θ\theta,求代价函数JJ

import numpy as np

def computeCost(X,y,theta):
  inner = np.power(((X * theta.T) - y), 2)  # 求解每个平方项
  return np.sum(inner) / (2 / len(X))   # 求和再除以2*len(X)
复制代码

梯度下降法实践

特征缩放

面对多维度特征问题,我们需要保证这些特征具有相近的尺度,帮助梯度下降算法更快地收敛。

以房价问题为例,假设仅用两个特征,房屋的尺寸和数量,以两个参数分别为横纵坐标,假设尺寸在0-2000平方英尺,数量在0-5之间。

绘制代价函数的等高线图能,看出图像会显得很扁,梯度下降算法需要非常多次的迭代才能收敛。

解决办法:将所有的特征的尺度尽量缩放到-1到1之间,令: xn=xnunsnx_n=\frac{x_n-u_n}{s_n} 其中unu_n为平均值,sns_n为标准差

均值归一化

学习率问题

梯度下降算法的每次迭代受到学习率的影响

  • 如果学习率过小,则达到收敛所需的迭代次数会非常高,收敛速度非常慢
  • 如果学习率过大,每次迭代可能不会减小代价函数,可能会越过局部最小值导致无法收敛

常用学习率包含:α=0.01,0.03,0.1,0.31,3,10\alpha=0.01, 0.03, 0.1, 0.31, 3,10

特征和多项式回归

如房价预测问题, hθ(x)=θ0+θ1宽度+θ2深度h_{\theta}{(x)} = \theta_0+\theta_1 \cdot宽度 + \theta_2 \cdot 深度 同时房屋面积=宽度 * 深度

在实际拟合数据的时候,可能会选择二次或者三次方模型;如果采用多项式回归模型,在运行梯度下降法之前,特征缩放很有必要。

正规方程 Normal Equation

梯度下降缺点

需要多次迭代才能达到局部最优解

正规方程demo

正规方程具有不可逆性

正规方程就是通过求解下面例子中的方程找出使得代价函数最小参数θ\thetaθ=(XTX)1XTy\theta ={{\left( {X^T}X \right)}^{-1}}{X^{T}}y

不可逆矩阵不能使用正规方程求解

Normal Equation VS Gradient Descent

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

参数θ\theta求解过程

θ=(XTX)1XTy\theta ={{\left( {X^{T}}X \right)}^{-1}}{X^{T}}y ,对其推导过程进行讲解

J(θ)=12mi=1m(hθ(x(i))y(i))2J\left( \theta \right)=\frac{1}{2m}\sum\limits_{i=1}^{m}{{{\left( {h_{\theta}}\left( {x^{(i)}} \right)-{y^{(i)}} \right)}^{2}}}

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

  1. 将==向量表达形式==转为==矩阵表达形式==,则有J(θ)=12(Xθy)2J(\theta )=\frac{1}{2}{{\left( X\theta -y\right)}^{2}} ,其中:
    • XXmmnn列的矩阵(mm为样本个数,nn为特征个数)
    • θ\thetann行1列的矩阵
    • yymm行1列的矩阵
  2. ==对J(θ)J(\theta )进行如下变换==

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

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

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

  1. 接下来对J(θ)J(\theta )偏导,需要使用的==矩阵求导法则==:

dABdB=AT\frac{dAB}{dB}={{A}^{T}}

dXTAXdX=2AX\frac{d{{X}^{T}}AX}{dX}=2AX

所以有:

J(θ)θ=12(2XTXθXTy(yTX)T0)\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)

=12(2XTXθXTyXTy0)=\frac{1}{2}\left(2{{X}^{T}}X\theta -{{X}^{T}}y -{{X}^{T}}y -0 \right)

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

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

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

正规方程的Python实现

import numpy as np

def normalEquation(X, y):
  theta = np.linalg.inv(X.T@X)@X.T@Y   # X.T@X等价于X.T.dot(X)  @等价于.dot
  return theta
复制代码
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享