三、用矩阵求解多元线性回归

 一、多元线性回归函数

上面解决了只有单一变量(面积)的房子价格预测问题,但是如果存在多个特征如:面积、卧室数量、楼层、修建年限等多个特征,如下:

三、用矩阵求解多元线性回归_第1张图片

我们用m表示样本数量,n表示特征数量,x^{(i)}表示输入的第i个样本,x^{(i)}_{j}表示输入的第i个样本的第j个特征。

只有一个变量时假设函数是:h_{\theta }(x)=\theta _0+\theta_1x,现在我们有4个特征,所以假设函数变为:h_{\theta }(x)=\theta _0+\theta_1x_1+\theta_2x_2+\theta_3x_3+\theta_4x_4,我们引入x_0=1,则方程可以变为:h_{\theta }(x)=x_0\theta _0+\theta_1x_1+\theta_2x_2+\theta_3x_3+\theta_4x_4,写成矩阵形式为:

x=\begin{bmatrix} x_0\\ x_1\\ x_2\\ x_3\\ x_4\end{bmatrix} \theta=\begin{bmatrix} \theta_0\\ \theta_1\\ \theta_2\\ \theta_3\\ \theta_4\end{bmatrix} 则h_{\theta }(x)=x_0\theta _0+\theta_1x_1+\theta_2x_2+\theta_3x_3+\theta_4x_4=\theta^Tx

这就是多特征的线性回归函数,我们称为多元线性回归函数。

二、使用梯度下降法处理多元线性回归函数

我们可以使用梯度下降处理一元线性回归函数的方法处理多元线性回归函数,如下图,左边是一元,右边是多元,注意其中的x_0=1

三、用矩阵求解多元线性回归_第2张图片

三、特征缩放

在进行梯度下降算法时,如果存在多个特征差距很大,比如房屋的卧室数量范围是1-5,面积值范围是500-2000,那么在进行梯度下降时,由于同样的步长,面积产生的数值更大,对结果的影响更大会导致函数的下降过程来回摇摆,收敛速度变慢。我们采用缩放的方法,将卧室数量/5,面积/2000,得到一个0和1之间的数值,那么下降过程就会顺滑很多,也会更快。如下:

三、用矩阵求解多元线性回归_第3张图片

但是,要注意,如果特征值的范围过小时也要适当放大。特征值不用都在同一区间,但彼此之间的差距不要太大。

均值归一化:(实际值-平均值)/最大值。经过均值归一化处理的数据能保证平均数为0的均匀分布。

四、学习率α

我们可以把梯度下降法的迭代次数作为横坐标,J(\theta)作为纵坐标,观察梯度下降算法是否收敛。

三、用矩阵求解多元线性回归_第4张图片

在迭代一定的次数之后,函数下降的幅度很小,几乎为一条直线。此时就可以看做函数已经收敛。

另外,也可以进行一种收敛的测试,设定一个阈值\varepsilon=10^{-3},如果代价函数J(\theta)一步迭代后的下降小于这个阈值,那么就可以认为函数收敛了。但是通常一个合适的阈值是难以确定的。曲线图会比较直观。 

学习率α过大,会出现下面这样的迭代次数-代价函数图

三、用矩阵求解多元线性回归_第5张图片三、用矩阵求解多元线性回归_第6张图片

总结:学习率α过小,会出现收敛速度慢的问题;过大,会出现代价函数不会每次迭代都下降甚至不收敛

五、特征和多项式回归

(一)如何选取特征

假设我们想卖出的房子的图片长度为20米,宽度为10米。我们就有两个特征长和宽,但是我们使用线性回归算法的时候并不一定要直接使用这两个特征,我们可以自己创造新的特征,我们实际观察到房子的价格其实与房子的面积关系最大,我们可以使area=长度*宽度,这就是房子的面积,两个特征变成了一个新特征。

(二)选取不同的函数作为代价函数

比如有下面这样一个模型,直线不能很好的拟合。我们可以用二次模型去拟合,但是二次函数会降下来,不合理。我们不觉得随着土地面积的增加,房子价格会降下来。我们使用一个三次函数去预测,如图中绿色曲线。

三、用矩阵求解多元线性回归_第7张图片三、用矩阵求解多元线性回归_第8张图片三、用矩阵求解多元线性回归_第9张图片

那么假设函数就如下所示:

三、用矩阵求解多元线性回归_第10张图片

六、正规方程

(一)正规方程求解线性回归函数

设有一个数据集如下所示,x1,x2,x3是特征,y为标签:

x1 x2 x3 y
x11 x12 x13 y1
x21 x22 x23 y2

设假设函数为h_{\theta }(x)=\theta _0x_0+\theta_1x_1+\theta_2x_2+\theta_3x_3,其中x_0=1,即在数据集上加上一列全为1的x1,如下:

则用矩阵的方式表示可得:h_{\theta }(x)=\theta _0x_0+\theta_1x_1+\theta_2x_2+\theta_3x_3等价于y=x\theta,其中:

y=\begin{bmatrix} y_1\\ y_2\end{bmatrix}x=\begin{bmatrix} x_0 &x_{11} &x_{12} &x_{13} \\ x_{0} &x_{21} &x_{22} &x_{23} \end{bmatrix}\theta=\begin{bmatrix} \theta_0\\ \theta_1\\ \theta_2\\ \theta_3 \end{bmatrix},等价于\begin{bmatrix} y_1\\ y_2\end{bmatrix}=\begin{bmatrix} x_0 &x_{11} &x_{12} &x_{13} \\ x_{0} &x_{21} &x_{22} &x_{23} \end{bmatrix}\begin{bmatrix} \theta_0\\ \theta_1\\ \theta_2\\ \theta_3 \end{bmatrix},现在我们要求解\theta向量。因为x矩阵不是方阵,只有方阵才能求逆矩阵,所以我们需要把x转换为方阵,两边同时左乘x矩阵的转置,得:x^Ty=(x^Tx)\theta,其中(x^Tx)肯定是一个方阵,把它看做一个整体,两边同时右乘它的逆矩阵得:(x^Tx)^{-1}x^Ty=\theta,此时就求出了\theta向量。

使用特征方程的话就不需要特征缩放了

(二)特征方程的优缺点

假设有m个样本,n个特征。

梯度下降 优点 不需要多次迭代
不需要选择学习速率α
缺点

当n特别大时需要计算(x^Tx)^{-1},这是一个n*n的矩阵,运算速度慢,时间复杂度大约是O(n^3)

特征方程 优点 当n特别大时能很好的运行
其中n的大小很难给出准确数字,但现在计算机的速度n在万级以下没有问题
缺点 需要选择学习速率α
需要多次迭代

对于一些复杂的方法,如一些分类算法,是无法使用特征方程求解的,我们只能使用梯度下降法。

(三)正规方程以及不可逆性

对于\theta=(x^Tx)^{-1}x^Ty,如果x^Tx不可逆,如何求解?我们把不可逆的矩阵称为退化矩阵或奇异矩阵,在实际情况中x^Tx不可逆的情况很少见。矩阵求逆有两种,分别为:伪逆(pseudo-inverse)和逆(inverse),数学上证明,即使矩阵是不可逆的,利用伪逆也可以求出结果。

(1)一般出现x^Tx不可逆的情况

①冗余的特征

如 x1=平方英尺,x2=平方米,那么两个特征之间有换算关系即 x1=3.28.3.28*x2,两列成倍数则矩阵不可逆

②特征数n大于样本数m

删除一些特征或使用正则化方法可以解决这个问题

你可能感兴趣的:(#,机器学习算法,机器学习,sklearn,算法)