吴恩达机器学习笔记-多变量线性回归(Linear Regression with Multiple Variables)

  • 多维特征

前面我们探讨了单变量(特征)的回归模型,现在我们对房价模型增加更多的特征,例如房间数楼层等,构成一个含有多个变量的模型,模型中的特征为 

                                                              

我们记作:n代表特征的数量; 代表特征矩阵中的第i行,即第i个特征实例。代表第i个特征实例中的第j个特征。因此支持多维特征的假设函数h变为了:,这个公式中有n+1个参数和n个变量,实际上我们令,则公式转化为:,同时用n+1维列向量表示参数和变量如下

                                                      

则假设函数可以简化记为: 

  • 多变量梯度下降 

如下图,与单变量线性回归类似,在多变量线性回归中,我们也构建一个代价函数,则这个代价函数是所有建模误差的平方和。

                                                                     

我们的目标和单变量线性回归问题中一样,是要找出使得代价函数最小的一系列参数。 多变量线性回归的批量梯度下降算法更新为:

                                                       

先随机初始化一系列的参数值,带入假设函数,计算所有的预测结果后,再给更新参数,如此循环直到收敛。

Python 示例:

 def computeCost(X, y, theta): 
   inner = np.power(((X * theta.T) - y), 2) 
   return np.sum(inner) / (2 * len(X))
  •  梯度下降法实践1-特征缩放

在面对多维特征问题的时候,我们要保证这些特征都在相近的尺度范围内,这将帮助梯度下降算法更快地收敛。以房价问题为例,假设我们使用两个特征,房屋的尺寸和房间的数量,尺寸的值为 0-2000平方英尺,而房间数量的值则是0-5,以两个参数分别为横纵坐标,绘制代价函数的等高线图能,如下图所示,看出图像会显得很扁,梯度下降算法需要非常多次的迭代才能收敛。

                                                  

将所有特征的尺度都尽量缩放到0到1之间 ,右边的代价函数等高线图像明显圆润,梯度下降收敛也会快一些。特征缩放让将所有特征的尺度都尽量缩放到-1到1之间,实际上-3到3和-1/3到1/3之间范围都可以。

均值归一化可以理解为特征缩放的另一种方法。特征缩放和均值归一化的作用都是为了减小样本数据的波动使得梯度下降能够更快速的寻找到一条捷径,从而到达全局最小值。因此,均值归一化则是先求得所有样本的均值,再按照公式求出新的特征 代替以前的,例如下面公式:

                                                         

S1既可以是训练集合取值的范围:最大值和最小值之差,也可以使用标准方差。

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

 如何确保梯度下降算法正确工作和学习率α怎么选择是使用梯度下降算需要解决的问题。我们可以绘制迭代次数和代价函数的图表来观测算法在何时趋于收敛或者是否正确工作。如下图所示,画出图表,当代价函数的值小于某个阀值(例如0.001)时,视为收敛。

                                                  

 通过图表我们也可以看出代价函数是不断下降的,反之,梯度下降算法工作不正常,可能会出现下面情况,是学习率过大的原因,应当使用更小的学习率α。

                                                     

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

α=0.001、0.003、0.01、0.03、0.1、0.3、1.......

  •  特征和多项式回归

如房价预测问题,两个相关的特征可以用一个特征x表示。

                                                  

线性回归并不适用于所有数据,有时我们需要曲线来适应我们的数据,比如一个二次方模型 ,或者三次方模型,通常我们需要先观察数据分布然后再决定准备尝试怎样的模型。 另外,我们可以令,将模型转化为线性回归模型,具体如下图。

                                                           

根据函数图形特性,我们还可以使

                                       

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

  • 正规方程 

对于某些线性回归问题,正规方程方法求解参数是更好的方案 。求解思路如下:

                                            

对于代价函数每一个j,对代价函数的不同参数求偏导,令偏导对于零,从而求解出参数。假设我们的训练集特征矩阵为向量X(包含,m X n+1维),训练集结果为向量y(m维),如下

                                  

 则正规方程求解θ=,在 Octave 中,正规方程写作:pinv(X'*X)*X'*y。正规方程的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

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

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

                                              

故只要特征变量的数目并不大,正规方程是一个很好的计算参数的方法。具体一点,只要特征变量数量小于一万,通常建议使用标准方程法,而不使用梯度下降法。实际上对于分类和逻辑回归那些算法,并不能使用标准方程法。对于那些更复杂的学习算法,我们将仍然使用梯度下降法。因此,梯度下降法是一个非常有用的算法,可以用在有大量特征变量的线性回归问题。对于这个特定的线性回归模型,正规方程法是一个比梯度下降法更快的替代算法。

  • 正规方程及不可逆性

 那对于矩阵的结果是不可逆,求不出来逆矩阵怎么办?在线性代数这门课中我们可以知道,有些矩阵可逆,而有些矩阵不可逆,我们称那些不可逆矩阵为奇异或退化矩阵。问题的重点在于不可逆的问题很少发生,在octave里,如果你用它来实现的计算,你将会得到一个正常的解。在Octave里,有两个函数可以求解矩阵的逆,一个被称为pinv(),另一个是inv(),这两者之间的差异是些许计算过程上的,一个是所谓的伪逆,另一个被称为逆。使用pinv() 函数可以展现数学上的过程,即便矩阵是不可逆的,也可以计算出的值。

矩阵不可逆的原因,首先,如果你可以用这样的一个线性方程,来展示那两个相关联的特征值,矩阵将是不可逆的。例如:在预测住房价格时,如果是以英尺为尺寸规格计算的房子,是以平方米为尺寸规格计算的房子,同时,你也知道1米等于3.28英尺 ( 四舍五入到两位小数 ),这样,你的这两个特征值将始终一个线性方程:。第二个原因是,在你想用大量的特征值,尝试实践你的学习算法的时候,可能会导致矩阵的结果是不可逆的。 具体地说,在m小于或等于n的时候,例如,有等于10个的训练样本也有等于100的特征数量。要找到适合的n+1维参数矢量θ,从10个训练样本中找到满足101个参数的值,有点困难。

如何使用小数据样本以得到这100或101个参数,通常,我们会使用一种叫做正则化的线性代数方法,通过删除某些特征或者是使用某些技术,来解决当m比n小的问题。即使你有一个相对较小的训练集,也可使用很多的特征来找到很多合适的参数。 总之当你发现的矩阵的结果是奇异矩阵,或者找到的其它矩阵是不可逆的,可以使用该技术。

总结一下,首先应该通过观察所有特征检查是否有多余的特征,如果有多余的就删除掉,直到他们不再是多余的为止;如果特征数量实在太多,我会删除一些特征,用较少的特征来反映尽可能多内容,或者考虑使用正规化方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值