多变量线性回归
多维特征
- 目前为止,我们探讨了单变量/特征的回归模型,现在我们对房价模型增加更多的特征,例如房间数楼层等,构成一个含有多个变量的模型,模型中的特征为(x1,x2,.......,xn)(x1,x2,.......,xn).
- 增添更多特征后,我们引入一系列新的注释:
- nn代表特征的数量
- x(i)x(i)代表第ii个训练实例,是特征矩阵中的第行,是一个向量(vector).
- 比方说,上图的 x(2)=⎡⎣⎢⎢⎢14163240⎤⎦⎥⎥⎥x(2)=[14163240]
- x(i)jxj(i)带包特征矩阵中的第ii行的第个特征,也就是第ii个训练实例的第个特征。
- 如上图所示的x(2)2=3,x(2)3=2x2(2)=3,x3(2)=2
- 支持多变量的假设h表示为:hΘ(x)=Θ0+Θ1x1+Θ2x2+....+ΘnxnhΘ(x)=Θ0+Θ1x1+Θ2x2+....+Θnxn
- 这个公式中有n+1n+1个参数和n个变量,为了使得公式能够简化一些,引入x0=1x0=1,则公式转化为:h(x)Θ=Θ0x0+Θ1x1+Θ2x2+.....+ΘnxnhΘ(x)=Θ0x0+Θ1x1+Θ2x2+.....+Θnxn,
- 此时模型中的参数是一个n+1n+1维的向量,任何一个训练实例也都是n+1n+1维的向量,特征矩阵X的维度是m∗(n+1)m∗(n+1).因此公式可以简化为h(x)Θ=ΘTXhΘ(x)=ΘTX,其中上标T代表矩阵的转置。
多变量梯度下降
- 与单变量线性回归类似,在多变量线性回归中,我们也构建一个代价函数,则这个代价函数是所有建模误差的平方和,即:J(Θ0,Θ1,....,Θn)=12m∑mi=1(hΘ(x(i))−y(i))2J(Θ0,Θ1,....,Θn)=12m∑i=1m(hΘ(x(i))−y(i))2
- 其中:hΘ(x)=ΘTX=Θ0+Θ1x1+Θ2x2+...ΘnxnhΘ(x)=ΘTX=Θ0+Θ1x1+Θ2x2+...Θnxn,
- 我们的目标和单变量线性回归问题中一样是 要找出使得代价函数最小的一系列参数。多变量线性回归的批量梯度下降算法为:
Repeat{Θj:=Θj−α∂∂ΘjJ(Θ0,Θ1,.....,Θn)}Repeat{Θj:=Θj−α∂∂ΘjJ(Θ0,Θ1,.....,Θn)} - 即:Repeat{Θj:=Θj−α∂∂Θj∑i=1m(hΘ(x(i))−y(i))2}Repeat{Θj:=Θj−α∂∂Θj∑i=1m(hΘ(x(i))−y(i))2}
- 求导后得到:Repeat{Θj:=Θj−α1m∑i=1m((hΘ(x(i))−y(i))⋅xj(i))}Repeat{Θj:=Θj−α1m∑i=1m((hΘ(x(i))−y(i))⋅xj(i))}
- 当n>=1时,
Θ0:=Θ0−α1m∑i=1m(hΘ(x(i))−y(i))x(i)0Θ0:=Θ0−α1m∑i=1m(hΘ(x(i))−y(i))x0(i)
Θ1:=Θ1−α1m∑i=1m(hΘ(x(i))−y(i))x(i)1Θ1:=Θ1−α1m∑i=1m(hΘ(x(i))−y(i))x1(i)
Θ2:=Θ2−α1m∑i=1m(hΘ(x(i))−y(i))x(i)2Θ2:=Θ2−α1m∑i=1m(hΘ(x(i))−y(i))x2(i) - 我们开始随机选择一系列的参数值,计算所有的预测结果后,再给所有的参数一个新的值,如此循环直到收敛。
- 代码示例:
- 计算代价函数J(Θ)=12m∑mi=1(hΘ(x(i))−y(i))2J(Θ)=12m∑i=1m(hΘ(x(i))−y(i))2,其中:hΘ(x)=ΘTX=Θ0x0+Θ1x1+Θ2x2+.....+ΘnxnhΘ(x)=ΘTX=Θ0x0+Θ1x1+Θ2x2+.....+Θnxn
梯度下降法实践1-特征缩放
- 在我们面对多维特征问题的 时候,我们要保证这些特征都具有相近的尺度,这将帮助梯度下降算法更快的收敛。
- 以房价问题为例,假设我们使用两个特征,房屋的尺寸和房屋的数量,尺寸的值为0-2000平方英尺,而房间数量的值则是0-5,以两个参数分别为横纵坐标,绘制代价函数的灯高线图,能看出图显得很扁,梯度下降算法需要非常多次的迭代才能收敛。
- 解决的方法是尝试将所有特征的尺度都尽量缩放到-1到1之间。如图:
- 最简单的方法是令:xn=xn−unsnxn=xn−unsn,其中unun是平均值,snsn是标准差。
梯度下降法实践2 - 学习率
- 梯度下降算法收敛所需的迭代次数根据模型的不同而不同,我们不能提前预知,我们可以绘制迭代次数和代价函数的图表来观测算法在何时趋于收敛。
- 也有一些自动测试是否收敛的方法,例如将代价函数的变化值与某个阈值(例如:0.0010.001)进行比较,但通常看上面这样的图表更好。
- 梯度下降算法的每次迭代受到学习率的影响,如果学习率αα过小,则达到收敛所需的迭代次数会非常高;如果学习率 αα过大,每次迭代可能不会减小代价函数,可能会越过局部最小值导致无法收敛。
- 通常可以考虑尝试些学习率:
α=0.01,0.03,0.1,0.3,1,3,10α=0.01,0.03,0.1,0.3,1,3,10
特征和多项式回归
如房价预测问题
- hΘ(x)=Θ0+Θ1×frontage+Θ2×depthhΘ(x)=Θ0+Θ1×frontage+Θ2×depth
- x1=frontagex1=frontage(临街宽度),x2=depthx2=depth(纵向深度),x=frontage∗depth=areax=frontage∗depth=area(面积),则:hΘ(x)=Θ0+Θ1xhΘ(x)=Θ0+Θ1x.
- 线性回归并不适用于所有数据,有时我们需要曲线来适应我们的数据,比如一个二次方模型:hΘ(x)=Θ0+Θ1x1+Θ2x22hΘ(x)=Θ0+Θ1x1+Θ2x22
- 或者三次方模型:hΘ(x)=Θ0+Θ1x1+Θ2x22+Θ3x33hΘ(x)=Θ0+Θ1x1+Θ2x22+Θ3x33
- 通常我们需要先观察数据然后再决定准备尝试怎样的模型。另外,我们可以令:x2=x22,x3=x33x2=x22,x3=x33,从而将模型转化为线性回归模型。
- 根据函数图形特性,我们还可以使:
hΘ(x)=Θ0+Θ1(size)+Θ1(size)2hΘ(x)=Θ0+Θ1(size)+Θ1(size)2 - 或者:
hΘ(x)=Θ0+Θ1(size)+Θ1size−−−−√hΘ(x)=Θ0+Θ1(size)+Θ1size - 如果我们采用多项式回归模型,在运行提付下降算法前,特征缩放是非常有必要的
正规方程:
- 到目前为止,我们都在使用梯度下降算法,但是对于某些线性回归问题,正规方程方法是更好的解决方案,如:
- 正规方程是通过求解下面的方程来找出使得代价函数最小的参数的:ααΘjJ(Θj)=0ααΘjJ(Θj)=0.假设我们的训练集特征矩阵为X(包含了x0=1x0=1)并且我们的训练集结果为向量yy,则利用正规方程解出向量.
- 上标T代表矩阵转置,上标-1代表矩阵的逆。设矩阵A=XTXA=XTX,则:(XTX)−1=A−1(XTX)−1=A−1
- 以下表示数据为例:
- 即:
运用正规方程方法来解参数。
⎡⎣⎢⎢⎢⎡⎣⎢⎢⎢1210414511416240115342301852136⎤⎦⎥⎥⎥×⎡⎣⎢⎢⎢11112104141615348525332122145403036⎤⎦⎥⎥⎥⎤⎦⎥⎥⎥−1×⎡⎣⎢⎢⎢1210414511416240115342301852136⎤⎦⎥⎥⎥×⎡⎣⎢⎢⎢460232315178⎤⎦⎥⎥⎥[[1111210414161534852122145403036]×[12104514511416324011534323018522136]]−1×[1111210414161534852122145403036]×[460232315178]注:对于那些不可逆的矩阵(通常是因为特征之间不独立,如同时包含英尺为单位的尺寸和米为单位的尺寸两个特征,也有可能是特征数量大于训练集的数量),正规方程方法是不能用的。
梯度下降与正规方程的比较:
总结一下,只要特征变量的数目不大,标准方程是一个很好的计算参数ΘΘ的代替方法。具体的说,只要特征变量小于一万,我通常使用标准方程法,而不是使用梯度下降法。
- 随着我们要讲的算法月累越复杂,例如,当我们讲到分类算法,像逻辑回归算法,我们会看到,实际上对于那些算法,并不能使用标准方程法。对于那些更复杂的学习算法,我们将不得不仍然使用梯度下降法,,因此梯度下降是一个非常有用的算法,可以用在有大量特征变量的线性回归问题。或者我们以后在课程中,会讲到的一些其他的算法,因为,标准法不死和或者不能用在它们上。但对于这个特定的线性回归模型,标准方程法是一个比梯度下降法更快的替代算法。所以,根据具体问题,以及你的特征变量的数量,这两种算法都是值得学习的。
正规方程及不可逆性
- 在这段视频中谈谈正规方程,以及他们的不可逆性。由于这是一种较为深入的概念,并且总有人问我有关这方面的问题,因此,我想在这里谈论它,由于概念较为深入,所以对这段可选材料放轻松,也许你可能会深入的探索下去,并且觉得以后会非常有用。但即使你没有理解正规方程和线性回归的关系,也没有关系。
- 我们要讲的问题如下:Θ=(XTX)−1XTyΘ=(XTX)−1XTy
- 如果你懂一点线性代数的知识,你或许会知道,有些矩阵不可逆。我们称那些不可逆矩阵为奇异或退化矩阵。
- 问题的重点在于X′XX′X的不可逆的问题很少发生,在Octave里,如果你用它来实现ΘΘ的计算,你将会得到一个正常的解。在Octave里,有两个函数可以求解矩阵的逆,一个被称为pinv(),另一个是inv(),这两者之间的差异使些许计算的过程上的,一个是所谓的伪逆,另一个被称为为逆。使用pinv()函数可以展现数学上的过程,这将计算出ΘΘ的值,即便矩阵X′XX′X是不可逆的。
- 在pinv()和inv()之间,又有哪些具体区别呢?
- 其中inv()引入了先进的数值计算的概念。例如,在预测住房价格时,如果x1x1是以英尺为尺寸规格计算的房子,x2x2是以平方米为尺寸规格计算的房子,同时,你也知道1米等于3.28英尺,这样,你的这两个特征值时钟满足约束:x1=x2∗(3.28)2x1=x2∗(3.28)2.
- 实际上,你可以用这样的一个线性方程,来战士那两个相关联的特征值,矩阵X′XX′X将是不可逆的。
- 第二个原因是,在你想用大量的特征值,尝试实践你的学习算法的时候,肯会导致矩阵X′XX′X的结果是不可逆的。具体的说,在mm小于或等于n时,例如有m等于10个的训练样本也有n等于100的特征数量。要找到适合的维参数矢量ΘΘ,这将会变成一个101101维的矢量,尝试从10个训练样本中找到满足101个参数的值,这工作可能会让你花上一阵子时间,但这并不是一个好主意。因为,正如我们所看到的你只有10个样本,以适应这100或101个参数,数据还是有些少。
- 稍后我们将看到,如何使用小数据样本以得到这100或101个参数,通常,我们会使用一种叫做正则化的线性代数方法,通常删除某些特征或者是使用某些技术,来解决当m比n小的时候的问题。即使你有一个相对较小的训练集,也可使用很多的特征来找到很多合适的参数。总之当你发现的矩阵X′XX′X的结果是奇异矩阵,或者找到的其他矩阵是不可逆的,我会建议你这么做。
- 首先,看特征值里是否有一些多余的特征,想这些x1x1和x2x2是线性相关的,弧尾线性函数。同时,当有一些多余的特征时,可以删除这两个重复特征里的其中一个,无需两个特征同时保留,将解决不可逆性的问题。因此,首先应该通过观察所有特征检查是否有多余的特征如果有多余的就删掉,知道他们不再是多余的为止,如果特征数量实在太多,我会删除些用较少的特征反应可能多的内容,否则我会考虑使用正规化方法。如果矩阵X′XX′X是不可逆的,如果在OCtave里,可以用伪逆函数privn()来实现。这种使用不同的线性代数库的方法被称为伪逆。即使X′XX′X的结果不可逆,但算法执行的流程是正确的,总之,出现不可逆矩阵的情况极少发生,所以在大多数实现线性回归中,出现不可逆的问题不应该过多的关注XTXXTX是不可逆的。
增加内容:
Θ=(XTX)−1XTyΘ=(XTX)−1XTy
的推导过程。 J(Θ)=12m∑i=1m(hΘ(x(i))−y(i))2J(Θ)=12m∑i=1m(hΘ(x(i))−y(i))2
其中,hΘ(x)=ΘTX=Θ0x0+Θ1x1+Θ2x2+...+ΘnxnhΘ(x)=ΘTX=Θ0x0+Θ1x1+Θ2x2+...+Θnxn
将向量表达形式转为矩阵表达式,则有J(Θ)=12(XΘ−y)2J(Θ)=12(XΘ−y)2,其中X为mm行列的矩阵(m为样本个数,n为特征个数),ΘΘ为nn行1列的矩阵,为mm行1列的矩阵对进行如下变换。
J(Θ)=12(XΘ−y)T(XΘ−y)=12(ΘTXT−yT)(XΘ−y)=12(ΘTXTXΘ−ΘTXTy−yTXΘ−yTy)J(Θ)=12(XΘ−y)T(XΘ−y)=12(ΘTXT−yT)(XΘ−y)=12(ΘTXTXΘ−ΘTXTy−yTXΘ−yTy)接下来对J(Θ)J(Θ)偏导,需要用到一下几个矩阵的求导法则:
dABdAB=AT//dXTAXdX=2AXdABdAB=AT//dXTAXdX=2AX所以有:
∂J(Θ)∂Θ=12(2XTXΘ−XTy−(yTX)T−0)=12(2XTXΘ−XTy−XTy−0)=XTXΘ−XTy∂J(Θ)∂Θ=12(2XTXΘ−XTy−(yTX)T−0)=12(2XTXΘ−XTy−XTy−0)=XTXΘ−XTy令∂J(Θ)∂Θ=0∂J(Θ)∂Θ=0,则有Θ=(XTX)−1XTyΘ=(XTX)−1XTy