Description
在回归问题中,如果使用线性函数去拟合给定数据集,这种方法称为线性回归法。
化简小技巧
假设目前输入变量只有两维,使用线性回归去预测时,线性方程为:
多添加一维输入 可以化简线性方程为:
损失函数
在给定训练集之后,如何去训练来得到线性方程的参数 呢? 最直接的方法就是让预测函数的结果与真实值越接近越好。 由此,可以定义损失函数(cost function):
那么,我们的目标就转换成了让损失函数的值越小越好。
LMS(Least Mean Squares)
有了损失函数之后,我们可以梯度下降法 (gradient decent)去更新参数 ,最后 可以收敛。
对损失函数求导得:
\begin{aligned} \frac{\partial}{\partial \theta_{j}} J(\theta) &=\frac{\partial}{\partial \theta_{j}} \frac{1}{2}\left(h_{\theta}(x)-y\right)^{2} \\ &=2 \cdot \frac{1}{2}\left(h_{\theta}(x)-y\right) \cdot \frac{\partial}{\partial \theta_{j}}\left(h_{\theta}(x)-y\right) \\ &=\left(h_{\theta}(x)-y\right) \cdot \frac{\partial}{\partial \theta_{j}}\left(\sum_{i=0}^{d} \theta_{i} x_{i}-y\right) \\ &=\left(h_{\theta}(x)-y\right) x_{j} \end{aligned}
我们得到了更新 的方法:
这个更新方法我们称为 LMS。
训练方法
给定数据集之后,我们如何利用数据集去更新参数呢?
这里由两种方法,一种是批次更新(batch gradient decent),一种是随机更新(stochastic gradient decent)。 批次更新法为:

随机更新法为:

随机更新法要比批次更新更快收敛,因此一般推荐使用随机更新法。
多维向量下
上诉推导都是在一维输入的情况下,如果特征值存在多维,那么结果是否会不同呢? 这里给出一般情况下更新方法的推导。 同理,给定训练集的输入为:
输出为:
损失函数为:
\begin{aligned} \frac{1}{2}(X \theta-\vec{y})^{T}(X \theta-\vec{y}) &=\frac{1}{2} \sum_{i=1}^{n}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right)^{2} \\ &=J(\theta) \end{aligned}
损失求导结果为:
\begin{aligned} \nabla_{\theta} J(\theta) &=\nabla_{\theta} \frac{1}{2}(X \theta-\vec{y})^{T}(X \theta-\vec{y}) \\ &=\frac{1}{2} \nabla_{\theta}\left((X \theta)^{T} X \theta-(X \theta)^{T} \vec{y}-\vec{y}^{T}(X \theta)+\vec{y}^{T} \vec{y}\right) \\ &=\frac{1}{2} \nabla_{\theta}\left(\theta^{T}\left(X^{T} X\right) \theta-\vec{y}^{T}(X \theta)-\vec{y}^{T}(X \theta)\right) \\ &=\frac{1}{2} \nabla_{\theta}\left(\theta^{T}\left(X^{T} X\right) \theta-2\left(X^{T} \vec{y}\right)^{T} \theta\right) \\ &=\frac{1}{2}\left(2 X^{T} X \theta-2 X^{T} \vec{y}\right) \\ &=X^{T} X \theta-X^{T} \vec{y} \end{aligned}
推导过程中用到的公式: 当 , ,
的更新方法为:
概率上的解释
那么为什么要使用最小二乘作为损失函数呢? 除了我们直观的理解:让预测函数和真实值越接近越好之外,能不能从概率的角度推导出来呢?
设真实值和输入之间存在如下关系:
其中, ,即:
那么:
我们希望寻找一组参数 ,使得在给定输入 的条件下,输出 的概率最大。
可以使用最大似然法解决这个问题:
\begin{aligned} L(\theta) &=L(\theta;X,\vec{y})=p(\vec{y}|X;\theta) \\ &=\prod_{i=1}^{n} p\left(y^{(i)} \mid x^{(i)} ; \theta\right) \\ &=\prod_{i=1}^{n} \frac{1}{\sqrt{2 \pi} \sigma} \exp \left(-\frac{\left(y^{(i)}-\theta^{T} x^{(i)}\right)^{2}}{2 \sigma^{2}}\right) \end{aligned}
化简得:
\begin{aligned} \ell(\theta) &=\log L(\theta) \\ &=\log \prod_{i=1}^{n} \frac{1}{\sqrt{2 \pi} \sigma} \exp \left(-\frac{\left(y^{(i)}-\theta^{T} x^{(i)}\right)^{2}}{2 \sigma^{2}}\right) \\ &=\sum_{i=1}^{n} \log \frac{1}{\sqrt{2 \pi} \sigma} \exp \left(-\frac{\left(y^{(i)}-\theta^{T} x^{(i)}\right)^{2}}{2 \sigma^{2}}\right) \\ &=n \log \frac{1}{\sqrt{2 \pi} \sigma}-\frac{1}{\sigma^{2}} \cdot \frac{1}{2} \sum_{i=1}^{n}\left(y^{(i)}-\theta^{T} x^{(i)}\right)^{2} \end{aligned}
因此,我们得到了最小二乘相同的损失函数:
正则化 Regulation
为了防止参数过大,出现过拟合的现象,我们在之前的损失函数中加入对参数的正则化惩罚。 惩罚有一般有两种:一范数和二范数。常用的是二范数。
此时的损失函数为;
对 求导之后,可以直接令导数为 0 计算出 或者使用梯度下降法求解。
贝叶斯
\begin{aligned} P(\theta|Y) &= \frac{P(Y|\theta)P(\theta)}{P(Y)} \\ &= P(Y|\theta)P(\theta) \end{aligned}
假设
对 求其极大似然估计也可以得到和上诉类似的梯度更新方式。
LWR(Locally Weighted Linear Regression)
前面讲的去预测某个输入 的输出,通用的流程是:
- 求使得 最小的参数
- 输出 作为预测值
而 LWR 的思想却是:
- 求使得 最小的参数
- 输出 作为预测值
的取值为:
如果 很大,那么需要费很大劲去减小损失; 反之,如果 很小,那么几乎可以不去考虑损失。
其实想想这样做也很合理。与输入的距离越近,对输出的结果影响越大,所以对应的权重需要加大,反之,亦然。
这种方法是Non-parametric algorithm。 在进行预测的时候,需要使用训练集的数据。而之前训练好参数直接对数据进行预测的方法称为Parametric algorithm。