Part1-多元线性回归
多特征量
在之前研究的线性回归中,通常只有一个特征,如房屋价格预测中的房屋面积,得出假设\(h_\theta(x) = \theta_0+\theta_1x\),但实际上,影响房屋价格的因素往往不仅仅是房屋面积,还有一些其它特征可能也会影响房屋价格,如卧室数量、楼层、房屋使用时长等。
于是得出多特征数据集中的各个元素表示:
n :特征数量
\(x^{(i)}\):输入的第i个训练样本
\(x^{(i)}_j\):输入的第i个训练样本的第j个特征
对应的假设:
之前的:\(h_\theta(x)=\theta_0+\theta_1x\)
现在的:\(h_\theta(x)=\theta_0+\theta_1x_1+\theta_2x_2+\theta_3x_3+\theta_4x_4+\cdots + \theta_nx_n\)
并且定义额外的第0个特征向量(\(x^{(i)}_0=1\)),因此
\(X=\left[ \begin{matrix} x_0 \\ x_1 \\ \cdots \\ x_n \end{matrix} \right] \in \mathbb R^{n+1}\),\(\Theta=\left[ \begin{matrix} \theta_0 \\ \theta_1 \\ \cdots \\ \theta_n \end{matrix} \right] \in \mathbb R^{n+1}\)
\(\begin{aligned} h_\theta(x) &= \theta_0x_0+\theta_1x_1+\cdots+\theta_nx_n \\ &=\Theta^T X \end{aligned}\)
其中\(x_0=1\),\(\theta_0x_0\)相当于\(\theta_0\)
多元梯度下降法
总结上述多元线性回归:
假设:\(h_\theta(x)=\theta^Tx=\theta_0x_0+\theta_1x_1+\cdots+\theta_nx_n \ (x_0=1)\)
参数:\(\theta_0,\theta_1,\cdots,\theta_n\)
代价函数:\(J(\theta_0,\theta_1,\cdots,\theta_n)=\frac{1}{2m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})^2\)
梯度下降:\(\theta_j := \theta_j-\alpha\frac{\partial}{\partial\theta_j}J(\theta_0,\cdots,\theta_n)\),对于每个\(j=0,\cdots,n\)同步更新
梯度下降:
\(\theta_j:=\theta_j-\alpha\frac{1}{m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})x^{(i)}_j\)
梯度下降法的实用技巧
特征缩放
思想:确保所有特征具有相近的范围,这样梯度下降法能更快的收敛
以房价预测为例,对应的特征可能包含房屋面积\(x_1\)(02000),房间数量\(x_2\)(15),二者取值范围相差较大,画出来的\(J(\theta)\)曲线如图,收敛就会非常慢
一种有效的方法就是进行特征缩放,具体来说:
\(x_1=\frac{x_1}{2000} \\ x_2=\frac{x_2}{5}\)
则对应\(J(\theta)\)的等值线如图,梯度下降法就会更快收敛
通常,我们执行特征缩放的目的是将特征值的取值约束到\([-1,1]\)
均值归一化:
使用\(x_i-\mu_i\)来替换\(x_i\),使得特征值的平均值为0(\(x_0\)除外)
\(x_1 = \frac{x_1-\mu_1}{s_1}\),其中\(\mu_1\)是训练集中特征\(x_1\)的平均值,\(s_1\)是\(x_1\)的标准差(或最大值 -最小值 )
同理得出\(x_2,x_3,\cdots,x_n\)
学习率
如何确保梯度下降工作正常?
在梯度下降算法运行时,绘制出代价函数\(J(\theta)\)的值 ,如图,横坐标表示梯度下降法的迭代次数,纵坐标表示\(J(\theta)\),如果梯度下降法正常工作的话,每步迭代之后,\(J(\theta)\)都应该下降
如何调整学习率
如果曲线如下图所示,则说明梯度下降法没有正常工作,此时对应的梯度下降过程就是之前以抛物线为例所说的学习率太大导致反复横跳,因此应该使用更小的学习率\(\alpha\)
如果曲线如下图所示,通常也需要选择更小的\(\alpha\)值
总结:
如果\(\alpha\)太小,就会收敛很慢
如果\(\alpha\)太大,\(J(\theta)\)在每次迭代后或许不会下降,甚至可能不收敛
通常以如下形式选择\(\alpha\):
\(\cdots,0.001, 0.003 , 0.01, 0.03 ,0.1,0.3 1,\cdots\)(按照3的倍数)
特征和多项式回归
以预测房价为例,假设\(h_\theta(x)=\theta_0+\theta_1\times width+\theta_2\times depth\)
实际上可以创造面积(\(area=width*depth\))这一新特征,来将假设设为\(h_\theta=\theta_0+\theta_1area\),可能这样一个模型会更好
与选择特征的类似的这种想法,被称为多项式回归
如:对于房价预测案例中,假设给定的是房屋大小这一特征,可能会有很多的模型用于拟合,如\(\theta_0+\theta_1x\)这样的模型,但直线可能并不能很好的拟合数据,因此可能会想到使用\(\theta_0+\theta_1x+\theta_2x^2\)这样的二次模型去拟合,同样的,也可能会使用三次模型等更高次模型来继续
以三次模型为例: \[ \begin{align} h_\theta(x)&=\theta_0+\theta_1x_1+\theta_2x_2+\theta_3x_3 \\ &= \theta_0+\theta_1(size)+\theta_2(size)^2+\theta_3(size)^3 \end{align} \\ (x_1=(size),x_2=(size)^2,x_3=(size)^3) \]
正规方程(Normal equation)
目前,对于代价函数的优化,我们都是采用梯度下降法进行的,通过每次迭代使得一步步逼近最优点。
相反地,使用正规方程方法,可以数学解法,直接一次性求出\(\theta\)的最优值
假设有一个非常简单的代价函数\(J(\theta)=a\theta^2+b\theta+c(\theta \in \mathbb R)\),如何最小化它呢?
求导可得\(\frac{d}{d\theta}J(\theta)=2a\theta+b\)令其为0,可直接求出\(\theta\)
类似的,假设\(\theta \in \mathbb R^{n+1}\)
\(J(\theta_0,\theta_1,\cdots,\theta_m)=\frac{1}{2m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})^2\),
对于每个\(J,\frac{\partial}{\partial \theta_j}J(\theta)=\cdots令其=0\)
解出\(\theta_0,\theta_1,\cdots,\theta_n\)
对于矩阵计算而言,求最优\(\Theta\)如下:
通常来说,m个样本\((x^{(1)},y^{(1)}),\cdots,(x^{(m)},y^{(m)})\),n个特征
\(x^{(i)}=\left[ \begin{matrix} x_0^{(i)}\\x_1^{(i)}\\x_2^{(i)}\\ \cdots\\ x_n^{(i)} \end{matrix} \right] \in \mathbb R^{n+1}\),设计矩阵\(X=\left[ \begin{matrix} --(x^{(1)})^T-- \\ --(x^{(2)})^T-- \\ \cdots \\ -- (x^{(m)})^T--\end{matrix} \right](m\times (n+1))\)
\(\Theta=(X^TX)^{-1}X^Ty\)
如果使用正规方程,就不需要做特征缩放
梯度下降 vs 正规方程
梯度下降 | 正规方程 |
---|---|
需要选择\(\alpha\) | 不需要选择\(\alpha\) |
需要多次迭代 | 不需要迭代 |
即使特征数量很大,也会正常运行 | 需要计算\((X^TX)^{-1}\) |
当特征数量很大时,非常慢 | |
如果特征数量>10000 | 如果特征数量<10000 |
正规方程与不可逆性(选学)
对于方程式\(\theta=(X^TX)^{-1}X^Ty\)
如果\(X^TX\)是不可逆的话怎么办?
通常有两种常见的原因:
冗余特征
由于某些原因,学习问题包含了多余的特征,如在预测房价时,如果\(x_1\)是以英尺为单位的房子面积,\(x_2\)是以平方米为单位的房子面积,则两个特征始终满足\(x_1=(3.28)^2x_2\),这样的话,\(x_1\)和\(x_2\)是线性相关的,矩阵\(X^TX\)将是不可逆的
太多特征
运行的学习算法有很多的特征,如\(m \le n\)时,特征数量比样本数量还要多,有时可能会成功,但通常来样本数量是不够的,因此,这种情况下,通常需要删除某些特征或使用正则化