首页 > 技术文章 > 线性回归之最小二乘法

liyier 2019-11-07 22:59 原文

线性回归之最小二乘法

1.最小二乘法的原理

最小二乘法的主要思想是通过确定未知参数\(\theta\)(通常是一个参数矩阵),来使得真实值和预测值的误差(也称残差)平方和最小,其计算公式为\(E=\sum_{i=0}^ne_i^2=\sum_{i=1}^n(y_i-\hat{y_i})\),其中\(y_i\)是真实值,\(\hat{y_i}\)是对应的预测值。如下图所示(来源于维基百科,Krishnavedala的作品),就是最小二乘法的一个示例,其中红色为数据点,蓝色为最小二乘法求得的最佳解,绿色即为误差。

图1

图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_{i=0}m(y{(i)}-h_\theta(x{(i)}))2=\sum_{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_{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_{i=1}^{m}(y^{(i)}-\theta_0-\theta_1x^{(i)})x^{(i)} = 0\tag{2.2} \]

联立两式,求解可得:

\[\theta_0 =\frac{\sum_{i=1}^m(x^{(i)})^2\sum_{i=1}^my^{(i)}-\sum_{i=1}^mx^{(i)}\sum_{i=1}^mx^{(i)}y^{(i)}}{m\sum_{i=1}^m(x^{(i)})^2-\sum_{i=1}^mx^{(i)}(\sum_{i=1}^mx^{(i)})^2} \tag{2.3} \]

\[\theta_1 =\frac{m\sum_{i=1}^mx^{(i)}y^{(i)}-\sum_{i=1}^mx^{(i)}\sum_{i=1}^my^{(i)}}{m\sum_{i=1}^m(x^{(i)})^2-\sum_{i=1}^mx^{(i)}(\sum_{i=1}^mx^{(i)})^2} \tag{2.4} \]

对于图1中的例子,代入公式\((2.3)\)\((2.4)\)进行结算得,\(\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_{i=0}^n\theta_ix_i =\theta_0+ \theta_1x_1 + \cdots+\theta_nx_n \]

损失函数变为:

\[J(\theta)=\sum_{j=1}^m(h_\theta(x^{(j)})-y^{(j)})^2=\sum_{j=1}^m(\sum_{i=0}^n\theta_ix_i^{(j)}-y^{(j)})^2 \]

损失函数\(J(\theta)\)分别对\(\theta_i(i=0,1,\dots,n)\)求偏导,得:

\[\frac{\partial J(\theta)}{\partial\theta_i} = 2\sum_{j=1}^m(h_\theta(x^{(j)})-y^{(j)})x^{(j)}=2\sum_{j=1}^m(\sum_{i=0}^n\theta_ix_i^{(j)}-y^{(j)})x^{(j)}\quad (i=0,1,\dots,n) \]

令偏导等于0,则有:

\[\sum{j=1}^m(\sum{i=0}^n\theta_ix_i^{(j)}-y^{(j)})x^{(j)}=0\quad (i=0,1,\dots,n) \]

这样最终得到的结果就是一个线性方程组,未知数的个数为n+1,方程的个数也为n+1,这样就可以通过高斯消元法解出\(\theta_i(i=0,1,\dots,n)\),具体可参见:详解最小二乘法原理和代码

对于线性回归问题,我们可以依据拟合函数的形式进行特征空间变换,即广义线性回归。例如,\(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_{j=1}^m(h_\theta(x^{(j)})-y^{(j)})^2\),求偏导的结果为:

\[\frac{\partial J(\theta)}{\partial\theta_i}=2\sum_{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.矩阵求解最小二乘法

对于函数\(ℎ_

推荐阅读