首页 > 技术文章 > 最小二乘法

Ooman 2019-08-16 15:45 原文

1.目标函数

已知数据样本:

\[X = \left( \begin{matrix} x_1^{(1)} &x_2^{(1)} &\cdots &x_n^{(1)}\\ x_1^{(2)} &x_2^{(2)} &\cdots &x_n^{(2)}\\ \vdots &\vdots &\ddots &\vdots\\ x_1^{(m)} &x_2^{(m)} &\cdots &x_n^{(m)} \end{matrix} \right) , Y = \left( \begin{matrix} y^{(1)}\\ y^{(2)}\\ \vdots\\ y^{(m)} \end{matrix} \right) \]

其中\(m\)是样本数,\(n\)\(X\)的特征维度。\(y^{(i)}, i=1, 2, \cdots, m\)为对应的样本得到的观测值。

假设通过某种手段(算法)得到\(x^{(i)}\)\(y^{(i)}\)的模型关系为\(\widehat {y^{(i)}} = f(x^{(i)})\)。这里\(\widehat {y^{(i)}}\)对应着预测值。最小二乘法的目标函数(损失函数)定义为:

\[J(\theta) = \frac{1}{2}\sum_{i=0}^m\left( y^{(i)} - \widehat {y^{(i)}} \right)^2 = \frac{1}{2}\sum_{i=0}^m\left( y^{(i)} - f(x^{(i)};\theta) \right)^2 \]

这里\(\frac{1}{2}\)是为了后面求解消去2,\(\theta\)\(x\)\(y\)映射关系函数\(f\)的参数,是求解的对象。要通过目标函数来求解\(\theta\),使得\(\theta\)能令目标函数取得最小值。

2.求解

要求\(J(\theta)\)取得最小值时\(\theta\)的值,可以通过对\(J(\theta)\)\(\theta\)进行求导,然后令导数为零得到方程(组)进行求解。假设\(f(x^{(i)};\theta)\)\(\theta\)的一次偏导存在,为\(\frac {\partial f(x^{(i)};\theta)} {\partial \theta}\),则:

\[\frac {\partial J(\theta)} {\partial \theta} = -\sum_{i=0}^m\left( y^{(i)} - f(x^{(i)};\theta) \right) \frac {\partial f(x^{(i)};\theta)} {\partial \theta} \]

令上式等于0,\(\sum_{i=0}^m\left( y^{(i)} - f(x^{(i)};\theta) \right) \frac {\partial f(x^{(i)};\theta)} {\partial \theta}=0\)即可求出\(\theta\)

3.线性关系的代数解法

如果\(f\)为线性的关系,即(增加\(x_0^{(i)}=1\)的项)

\[f(x^{(i)};\theta)=\theta_0x_0^{(i)} + \theta_1x_1^{(i)} + \cdots + \theta_nx_n^{(i)} = \sum_{j=0}^n\theta_jx_j^{(i)}, i=1, 2, \cdots, m \]

于是有\(\frac {\partial f(x^{(i)};\theta)} {\partial \theta_j}=x_j^{(i)}\),代入\(\frac {\partial J(\theta)} {\partial \theta}\)得:

\[\frac {\partial J(\theta)} {\partial \theta_j} = -\sum_{i=0}^m\left( y^{(i)} -\sum_{j=0}^n\theta_jx_j^{(i)} \right) x_j^{(i)} \]

对于\(j=0, 1, 2, \cdots, n\),由上式等于0可以组成\(n+1\)个方程的方程组:

\[\begin{cases} \sum_{i=0}^m\left( y^{(i)} -\sum_{j=0}^n\theta_jx_j^{(i)} \right) x_0^{(i)} = 0\\ \sum_{i=0}^m\left( y^{(i)} -\sum_{j=0}^n\theta_jx_j^{(i)} \right) x_1^{(i)}=0\\ \sum_{i=0}^m\left( y^{(i)} -\sum_{j=0}^n\theta_jx_j^{(i)} \right) x_2^{(i)}=0\\ \cdots \\ \sum_{i=0}^m\left( y^{(i)} -\sum_{j=0}^n\theta_jx_j^{(i)} \right) x_n^{(i)}=0 \end{cases} \]

解这个方程组即可得到使得目标函数取最小值的\(\theta\)

4.线性关系的矩阵解法

\(f(x^{(i)};\theta)=\theta_0x_0^{(i)} + \theta_1x_1^{(i)} + \cdots + \theta_nx_n^{(i)}\),把所有样本写成矩阵的形式为\(f(X;\theta)=X\theta\),这里的\(X\)增加了\(x_0=1\)的项,为\(m\times (n+1)\)的矩阵,\(\theta\)\(n+1\)的列向量。目标函数可以写为:

\[\begin{aligned} J(\theta) &= \frac{1}{2}(X\theta-Y)^T(X\theta-Y)\\ &=\frac{1}{2}(\theta^TX^T-Y^T)(X\theta-Y)\\ &=\frac{1}{2}(\theta^TX^TX\theta - \theta^TX^TY-Y^TX\theta + Y^TY) \end{aligned} \]

\(\theta\)求导得:

\[\frac{\partial J(\theta)}{\partial \theta} = \frac{1}{2}(2X^TX\theta - X^TY - (Y^TX)^T) = \frac{1}{2}(2X^TX\theta - 2X^TY) = X^TX\theta - X^TY \]

令其为0,得\(X^TX\theta = X^TY\),然后容易求得:

\[\theta = (X^TX)^{-1}X^TY \]

5.注意

求解的过程,要求\(X^TX\)的逆矩阵,如果数据量很大,是很耗时的。

逆矩阵是有可能不存在,这时可以加入大于0的扰动\(\lambda\),即求\(X^TX+\lambda I\)的逆矩阵。

对于\(f\)是线性的,上面的推导说明是可以求解的,如果\(f\)不是线性的,可能会导致无法求解。

推荐阅读