4多变量线性回归(Linear Regression with multiple variables)

4.1多维特征(Multiple features)

多变量模型注释:

  • nnn:特征数量
  • x(i){x^{\left( i \right)}}x(i):第 iii 个训练实例,是特征矩阵中的第iii行,是一个向量vector)。
  • xj(i){x}_{j}^{\left( i \right)}xj(i):特征矩阵中第 iii 行的第 jjj 个特征,也就是第 iii 个训练实例的第 jjj 个特征。

支持多变量的假设 hhh 表示为:hθ(x)=θ0x0+θ1x1+θ2x2+...+θnxnh_{\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

此时模型中的参数是一个n+1n+1n+1维的向量,特征矩阵XXX的维度是 m∗(n+1)m*(n+1)m(n+1)。 因此公式可以简化为:hθ(x)=θTXh_{\theta} \left( x \right)={\theta^{T}}Xhθ(x)=θTX

4.2多变量梯度下降(Gradient descent for multiple variables)

在多变量线性回归中构建代价函数:J(θ0,θ1...θn)=12m∑i=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}}}J(θ0,θ1...θn)=2m1i=1m(hθ(x(i))y(i))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}}hθ(x)=θTX=θ0+θ1x1+θ2x2+...+θnxn

目标是要找出使得代价函数最小的一系列参数。

n>=1n>=1n>=1时,
θ0:=θ0−a1m∑i=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)}θ0:=θ0am1i=1m(hθ(x(i))y(i))x0(i)

θ1:=θ1−a1m∑i=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)}θ1:=θ1am1i=1m(hθ(x(i))y(i))x1(i)

θ2:=θ2−a1m∑i=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)}θ2:=θ2am1i=1m(hθ(x(i))y(i))x2(i)

开始随机选择一系列的参数值,计算所有的预测结果后,再给所有的参数一个新的值,如此循环直到收敛。

4.3梯度下降算法实践1:特征缩放(Gradient descent in practice I: Feature Scaling)

面对多维特征问题时,要保证这些特征都具有相近的尺度,这将帮助梯度下降算法更快收敛。可以使用均值归一化(Mean normalization)。xn=xn−μnsnx_n=\frac{x_n-\mu_n}{s_n}xn=snxnμn

其中 μn\mu_nμn 是平均值,sns_nsn 是标准差。

4.4梯度下降算法实践2:学习率(Gradient descent in practice II: Learning rate)

梯度下降算法收敛所需要的迭代次数根据模型的不同而不同,我们不能提前预知,我们可以绘制迭代次数和代价函数的图表来观测算法在何时趋于收敛。
在这里插入图片描述
梯度下降算法的每次迭代受到学习率的影响,如果学习率 aaa 过小,则达到收敛所需的迭代次数会非常高;如果学习率 aaa 过大,每次迭代可能不会减小代价函数,可能会越过局部最小值导致无法收敛。

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

α=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

4.5特征和多项式回归(Features and polynomial regression)

线性回归并不适用于所有数据,有时需要曲线来适应我们的数据,如一个二次方模型:hθ(x)=θ0+θ1x1+θ2x22h_{\theta}\left( x \right)={\theta_{0}}+{\theta_{1}}{x_{1}}+{\theta_{2}}{x_{2}^2}hθ(x)=θ0+θ1x1+θ2x22
或者三次方模型: hθ(x)=θ0+θ1x1+θ2x22+θ3x33h_{\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

4.6正规方程(Normal equation)

正规方程是通过求解下面的方程来找出使得代价函数最小的参数的:∂∂θjJ(θj)=0\frac{\partial}{\partial{\theta_{j}}}J\left( {\theta_{j}} \right)=0θjJ(θj)=0

假设训练集特征矩阵为 XXX(包含了 x0=1{{x}_{0}}=1x0=1),训练集结果为向量 yyy,则利用正规方程解出向量 θ=(XTX)−1XTy\theta ={{\left( {X^T}X \right)}^{-1}}{X^{T}}yθ=(XTX)1XTy

设矩阵A=XTXA={X^{T}}XA=XTX,则:(XTX)−1=A−1{{\left( {X^T}X \right)}^{-1}}={A^{-1}}(XTX)1=A1

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

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

4.7 正规方程及不可逆性(Normal equation and non-invertibility)

关于θ=(XTX)−1XTy\theta ={{\left( {X^{T}}X \right)}^{-1}}{X^{T}}yθ=(XTX)1XTy

对于矩阵XTXX^TXXTX的结果是不可逆的情况咋办呢?
不可逆矩阵为奇异或退化矩阵。

  • 事实上XTXX^TXXTX的不可逆的问题很少发生。
  • 在用大量的特征值,尝试实践学习算法时,可能会导致矩阵XTXX^TXXTX的结果是不可逆的。

通常会使用正则化的线性代数方法,通过删除某些特征或者是使用某些技术,来解决当mmmnnn小的时候的问题。即使有一个相对较小的训练集,也可使用很多的特征来找到很多合适的参数。

当矩阵XTXX^TXXTX的结果是奇异矩阵,或者找到的其它矩阵是不可逆的,建议这么做。

  • 看特征值里是否有一些多余的特征,如果有多余的就删除掉。

增加内容:

θ=(XTX)−1XTy\theta ={{\left( {X^{T}}X \right)}^{-1}}{X^{T}}yθ=(XTX)1XTy 的推导过程:

J(θ)=12m∑i=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}}}J(θ)=2m1i=1m(hθ(x(i))y(i))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}}hθ(x)=θTX=θ0x0+θ1x1+θ2x2+...+θnxn

将向量表达形式转为矩阵表达形式,则有J(θ)=12(Xθ−y)2J(\theta )=\frac{1}{2}{{\left( X\theta -y\right)}^{2}}J(θ)=21(Xθy)2 ,其中XXXmmmnnn列的矩阵(mmm为样本个数,nnn为特征个数),θ\thetaθnnn行1列的矩阵,yyymmm行1列的矩阵,对J(θ)J(\theta )J(θ)进行如下变换

J(θ)=12(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)

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

=12(θTXTXθ−θTXTy−yTXθ−yTy)=\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(θ)J(\theta )J(θ)偏导,需要用到以下几个矩阵的求导法则:

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

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

所以有:∂J(θ)∂θ=12(2XTXθ−XTy−(yTX)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)

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

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

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

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

5 Octave教程(Octave Tutorial)

我使用python写编程作业,这部分不用学(真好)。

5.1基本操作(Basic operations)

5.2 移动数据(Moving data around)

5.3 计算数据(Computing on data)

5.4 绘图数据(Plotting data)

5.5 控制语句:for,while,if语句(Control statements: for, while, if statements)

5.6 向量化(Vectorial implementation)

5.7 工作和提交的编程练习

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐