多变量线性回归与单变量是相对应的,我们在起那面讲到单变量时,只有一个x。而对于多变量来说则是有多个,如下面的图所示。输入的变量有x1,x2,x3,x4,多个变量,而输出的值只有一个y。
用n来表示特征,我们使用m来表示样本数。我么使用x(i)来表示第i个样本中输入的特征值。即表示对应样本的特征向量。使用x(i)_J表示第i个特征向量中第J个特征。上图就有四个特征。
那么原本的假设函数就不再适合一个样本中有多个特征对应的训练数据集,那么我们提出新的假设函数如下。
也可以认为定义了一个额外的特征X0=1。我们本质上可以将其看作是两个向量的内积。
eg x=[ X0 ]
[ X1 ]
[ X2 ]
[ X3 ]
.....
[ Xn ]
θ=[θ0,θ1,θ2......θn]
用向量θ*x即可得该函数。即多元线性回归。
多元梯度下降
与单变量线性回归一致,我们在多变量线性回归中仍然要确定假设函数,代价函数以及对应的梯度下降算法。
如下图所示。为多变量线性回归中的假设函数,代价函数以及梯度下降算法。
注:对于参数值θ来说我们并不认为它是一个有n+1个元素的集合,而是认为它是一个整体。是一个n+1维的θ向量。因此在上式中J(θ0,θ1...,θn)并不合适,我们使用J(θ)来代替。
与单变量线性回归中最后所得的最合适的参数的方法一致,如下图是多元梯度下降所得的结果。下图左边是单变量线性回归的梯度下降,右边是多变量线性回归的梯度下降(右边对应于J(θ)对对应的θj求偏导即可得出)。
多远梯度下降法演练
特征缩放
但有时我们会遇到一些困扰,梯度下降算法本身由前面的知识我们可以得出是一个不断迭代的过程,在迭代的过程中参数会不断地变化,对应的假设函数也会不断的变化。直至最后当梯度下降函数取得最小的参数时,代价函数会趋于平缓,如下图所示。
但我们在单变量线性回归中最后得出的结果可知,参数实际上是和特征有关系的。在多变量中这一条同样成立。而多变量中由于变量或者说特征不再是单一的,那么他们之间也会有各种各样的影响。如果各个特征之间的差值比较大,那么代价函数的等值线则会呈现一种倾斜并且椭圆的形状。而梯度下降算法的、收敛速度也会下降,与我们预期不相符合。所以我们在处理时需要进行特征缩放。即将所有的特征值同意缩放到-1到1之间,不必太拘泥于该标准,一般来说大的取值在-3到3之间。小的取值在-1/3到1/3之间即可。
并非只有这一种方法我们还有一种方法叫 均值归一化。(其实在后面的学习中了解到标准化和归一化是两种不同的概念)
归一化 :通过对原始数据进行变换把数据映射到(默认为[0,1]之间)。
标准化 :通过对原始数据进行变换把数据变换到均值为0,方差为1范围内 。
具体做法如下图所示
图中 u1代表的是x1,这个特征的平均值。s1代表的是特征值的范围(最大值减去最小值)。
其实特征缩放并不需要太精确,只是为了让梯度下降算法运行的更快一点。
学习率
那么此时又出现了一个新的问题,梯度下降算法还含有学习率这一 参数。如何选择合适的学习率同样尤为重要。在前面可以得知当学习率过大时会出现左右跳动无法达到最低点的情况,而学习率太小则会出现梯度下降函数下降速度过慢的情况。在多变量中,同样成立。
现在我们先来谈谈 梯度下降算法。以下为个人的理解。
我们通过梯度下降算法找到一个合适的θ值,这个θ值可以使得代价函数(J(θ))处在最低点。然后我们就可以判断出梯度下降算法得出的θ值是合适的,这个时候就可以将θ值反代入到假设函数里面去。对于梯度下降算法和代价函数来说,在梯度下降算法迭代的过程中,代价函数应该是不断下降并且趋于平缓的,最后无法下降这才是合理的。但实际情况并非如此。会出现各种情况如图所示。
上图左边为代价函数随着梯度下降算法不断迭代而形成的图像。很明显,他们并不符合我们对代价函数的期望。其实就是因为学习率的取值问题。上图中学习率的取值都过大了。一般来说学习率小会导致梯度下降算法下降比较慢,但学习率过大则会导致代价函数可能不会每一步都下降。最后甚至会导致不收敛。
那么如何能够得到一个合适的学习率哪?
一般来说从0.0001开始,每次增加10倍。然后对应于每一个学习率,都将其的梯度下降的迭代与代价函数的取值画出来。然后最后我们可以由图像得到一个不错的学习率。就是最趋于平缓的。
特征和多项式回归
以上图为例,训练集中实际给出两个特征一个是临街长度frontage一个是深度depth。但我们并非一定要用给出的特征,我们其实可以自己创造一个特征,例如可以将宽度和深度相称得到面积,然后以面积作为特征。这样样本中就只有一个特征。只包含面积即可。那么我们实际就将其变成单变量线性回归问题了。
承接上面的例子,假如给定的训练集如图片所示,很明显并非一条直线,但我们只有一个特征,即房子的面积,这时单独使用一个特征来构建假设函数就有些不合适,那么我们可以将房子的面积这一特征的平方和立方作为两个新的特征,这样构建的假设函数与训练集就可以很好的拟合了。
实际上通过该例子想要告诉我们的是我们可以自由的选择使用什么特征,并且通过设计不同的特征,能够用更复杂的模型拟合数据。比如上面的例子。我们从何时的角度寻找特征,就能得到一个更符合数据的模型。
正规方程
正规方程介绍
在前面的例子中,我们对于线性问题求解最合适的参数时使用的均是梯度下降的方法,梯度下降的方法可以得出最合适的参数,但本身是一个不断迭代的过程,那么有没有一步就可以得出的算法那?自然是有的,即正规方程。
正规方程的基本过程与求导相似,以简单例子举例。
假设J(θ)为代价函数,那么我们需要求其最小值。再高等数学中我们要求一个函数的最小值就是求导,然后令倒数等于0。所谓正规方程实际是一样的。
但实际上我们所遇到的问题往往特征值都不止一个。因此我们需要求得的参数就是一个向量而非一个值。如上图所示。面对这样的情况我们要做的只不过是把刚才的步骤扩大即可,即求每一个参数的对应的偏导数,然后令其为0.这样最后我们在算得方程组后就可以得到该参数向量中每一个参数的值。
但很明显这个过程十分复杂。我们不想这样做。
以上图给出的数据为例。我们通过观察可以得知,该数据中一共有4个样本,4个特征(因为要对应于θ0,所以我们增加一列特征值x0,它的元素的取值均为1),这样的话我们就可以得到一个特征矩阵X(x是一个m*(n+1)维的矩阵,其中m表示有m个样本,n表示原本的特征有n个),而y则是一个m维向量代表一共有m个样本。最后我们通过最下面的公式即可得出θ的值。
如上图所示,我们一般情况下得到的都是对应的m个样本以及每个样本有n个特征值。我们取一个样本中所有的特征值将其转置放到X矩阵对应的行数就构成了一个X矩阵(设计矩阵)。而y同样。得出。
在正规方程中不需要特征缩放。
那么我们现在来进行一下正规方程和梯度下降的对比。
梯度下降:1.由于需要进行学习率的选择所以需要运行多次找到最适合自己的学习率。
2.梯度下降本身是一个不断迭代的过程,取决于具体细节,运算就会更慢。
3.在特征非常多的时候能够很好的运行。
正规方程:1.不需要选择学习率。
2.不用迭代
3.不需要特征缩放
4.由于时间复杂度为n^3所以特征值过多就会变慢。
所以我们通常将一万作为正规方程和梯度下降的一个分界线。
正规方程在矩阵不可逆的情况下的解决办法
X'X不可逆的情况其实很少发生
当出现矩阵不可逆的情况时,通常有以下两种可能
1.多余的特征参数,造成线性相关。
2.特征参数大于样本数,即n>=m
解决办法:删除多余的特征参数,或正规化处理。