线性回归之最小二乘法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.最小二乘法的原理最小二乘法的主要思想是通过确定未知参数(通常是一个参数矩阵),来使得真实值和预测值的误差(也称残差)平方和最小,其计算公式为
E=\sum_{i=0}^ne_i^2=\sum_{i=1}^n(y_i-\hat{y_i})^2 ,其中 y_i 是真实值,
\hat y_i 是对应的预测值。
如下图所示(来源于维基百科,Krishnavedala 的作品),就是最小二乘法的一个示例,其中红色为数据点,蓝色为最小二乘法求得的最佳解,
绿色即为误差。
图1图中有四个数据点分别为:(1, 6), (2, 5), (3, 7), (4, 10)。
在线性回归中,通常我们使用均方误差来作为损失函数,均方误差可以看作是最小二乘法中的 E 除以
m(m 为样本个数),所以最小二乘法求出来的最优解就是将均方误差作为损失函数求出来的最优解。
对于图中这些一维特征的样本,我们的拟合函数为
h_\theta(x)=\theta_0+\theta_1x ,所以损失函数为
J(\theta_0,\theta_1)=\sum_\limits{i=0}^m(y^{(i)}-
h_\theta(x^{(i)}))^2=\sum_\limits{i=0}^m(y^{(i)}-\theta_0-
\theta_1x^{(i)})^2 (这里损失函数使用最小二乘法,并非均方误差),其中上标(i)表示第 i 个样本。
2.最小二乘法求解要使损失函数最小,可以将损失函数当作多元函数来处理,采用多元函数求偏导的方法来计算函数的极小值。
例如对于一维特征的最
小二乘法, J(\theta_0,\theta_1) 分别对 \theta_0 , \theta_1 求偏导,令偏导
等于 0 ,得:\frac{\partial J(\theta_0,\theta_1)}{\partial\theta_0}=-
2\sum_\limits{i=1}^{m}(y^{(i)}-\theta_0-\theta_1x^{(i)}) =
0\tag{2.1}\frac{\partial J(\theta_0,\theta_1)}{\partial\theta_1}=-
2\sum_\limits{i=1}^{m}(y^{(i)}-\theta_0-\theta_1x^{(i)})x^{(i)} = 0\tag{2.2}联立两式,求解可得:\theta_0
=\frac{\sum_\limits{i=1}^m(x^{(i)})^2\sum_\limits{i=1}^my^{(i)}-
\sum_\limits{i=1}^mx^{(i)}\sum_\limits{i=1}^mx^{(i)}y^{(i)}}{m\sum_\limits{
i=1}^m(x^{(i)})^2-(\sum_\limits{i=1}^mx^{(i)})^2} \tag{2.3}\theta_1
=\frac{m\sum_\limits{i=1}^mx^{(i)}y^{(i)}-
\sum_\limits{i=1}^mx^{(i)}\sum_\limits{i=1}^my^{(i)}}{m\sum_\limits{i=1}^m(
x^{(i)})^2-(\sum_\limits{i=1}^mx^{(i)})^2} \tag{2.4}对于图 1 中的例子,代入公式进行计算,得: \theta_0 = 3.5, \theta_1=1.4,J(\theta) = 4.2 。
对于 n 维特征的样本,同样可以采用这种方式来求解。
对于特征维度 (x_1,x_2, \cdots,x_n) ,我们增加一个第 0 维 x_0=1 ,这样增广特征向量 x = (x_0,x_1,\cdots,x_n) ,增
广权向量为 \theta = (\theta_0, \theta_1,\dots,\theta_n) .此时我们的拟合函数变为: h_\theta(x) = \sum_\limits{i=0}^n\theta_ix_i =\theta_0+ \theta_1x_1 + \cdots+\theta_nx_n \tag{2.5}损失函数变为:
J(\theta)=\sum_\limits{j=1}^m(h_\theta(x^{(j)})-
y^{(j)})^2=\sum_\limits{j=1}^m(\sum_\limits{i=0}^n\theta_ix_i^{(j)}-
y^{(j)})^2\tag{2.6}损失函数分别对求偏导,得:\frac{\partial
J(\theta)}{\theta_i} = 2\sum_\limits{j=1}^m(h_\theta(x^{(j)})-
y^{(j)})x^{(j)}=2\sum_\limits{j=1}^m(\sum_\limits{i=0}^n\theta_ix_i^{(j)}-
y^{(j)})x^{(j)}\quad (i=0,1,\dots,n) \tag{2.7}令偏导等于 0,则有:
\sum_\limits{j=1}^m(\sum_\limits{i=0}^n\theta_ix_i^{(j)}-
y^{(j)})x^{(j)}=0\qquad (i=0,1,\dots,n) \tag{2.8}这样最终得到的结果就是一个线性方程组,未知数的个数为 n+1,方程的个数也为 n+1,这样就可以通过高斯消元
法解出,具体可参见:详解最小二乘法原理和代码。
对于线性回归问题,我们可以依
据拟合函数的形式进行特征空间变换,即广义线性回归。
例如,
h_\theta(x)=\theta_0+\theta_1x_1+\theta_2x_2^2 ,我们可以令 x_2:=x_2^2 ,这里 := 表示赋值,即将右边的值赋给左边。
这样又变成了我们所熟悉的拟合函数形式。
对于非线性回归问题,最小二乘法的思想同样适用,只不过函数形式有所变化。
例如,对于拟合函数 h_\theta(x)=\theta_0+\theta_1x+\theta_2l nx ,此时
J(\theta)=\sum_\limits{j=1}^m(h_\theta(x^{(j)})-y^{(j)})^2 ,求偏导的结果为:\frac{\partial
J(\theta)}{\partial\theta_i}=2\sum_\limits{j=1}^{m}(h_\theta(x^{(j)})-
y^{(j)})\frac{\partial h_\theta(x)}{\theta_i}\quad (i=0,1,2);其中
\frac{\partial h_\theta(x)}{\theta_0} = 1, \frac{\partial
h_\theta(x)}{\theta_2} = x, \frac{\partial h_\theta(x)}{\theta_2} = lnx同
样可以构造线性方程组,用高斯消元法求解。
3.矩阵求解最小二乘法对于函数
h_\theta(x)=\theta_0+\theta_1 x_1+\dots+\theta_n x_n ,我们将其用矩阵表示为:X\theta = Y \qquad \tag{3.1}其中,X = \left\{\begin{matrix} (x^{(1)})^T \\ (x^{(2)})^T \\ \vdots \\(x^{(m)})^T \end{matrix} \right\} , Y =
\left\{\begin{matrix} y^{(1)} \\ y^{(2)} \\ \vdots \\y^{(m)}) \end{matrix} \right\},x^{(j)}=\left\{\begin{matrix} x_0^{(j)}) \\ x_1^{(j)} \\ \vdots \\ x_n^{(j)} \end{matrix} \right\}, \theta = \left\{\begin{matrix} \theta_0 \\ \theta_1 \\ \vdots \\ \theta_n \end{matrix} \right\}\tag{3.2}m 表示样本个数,n 为特征维度,,即的第一列全为 1,表示第 j 个样本的第 i 个特征,为增广样本
矩阵((1+n)*m 维),为真实值组成的列向量。
损失函数表示为:
J(\theta)=\sum_\limits{j=1}^m(h_\theta(x^{(j)})-y^{(j)})^2=( − )^
( − )\tag{3.3}根据最小二乘法,利用矩阵求导得:(具体推导参见线代随笔12-线
性回归的矩阵推导和线性回归相关向量求导)\frac{\partial
J(\theta)}{\partial\theta}=2X^T(X\theta-Y)\tag{3.4}令求导结果等于 0 矩阵,
可得:X^TX\theta = X^TY\quad\Rightarrow \quad \theta = (X^TX)^{-1}X^TY
\tag{3.5}对于图 1 中的例子,利用公式计算得: \theta = \left\{\begin{matrix} 3.5 \\1.4\end{matrix} \right\}4.总结最小二乘法可以直接求解参数矩阵,在计算
时可以直接套入公式。
但是仍有一定的局限性,主要体现在:1.的逆矩阵可能不存在,这个在 Matlab 中,可以通过求伪逆来进行计算。
2.对于式,可以将其看成一个线性
方程组(假设各方程线性无关)。
如果样本个数 m 小于特征维数 n,那么此方程组有无穷多个解。
如果 m = n,有唯一解。
如果 m 大于 n,无解(即存在矛盾解)。
最小二乘法一般是在 m 大于 n 的时候使用,此时求出来的解是最优近似解。
3.最小二乘
法的时间复杂度为,当 n 特别大的时候(一般大于 10000),求逆矩阵的过程非常复杂。
此时采用最小二乘法,会非常耗时。
参考链接:最小二乘法小结半小时学习最小
二乘法。