线性回归(Linear Regression)是一个机器学习模型用于完成回归任务。为解释线性回归,我们将其分为两个部分:线性和回归。
[https://simple.wikipedia.org/wiki/Linear_regression#/media/File:Linear_regression.svg]
上图是线性回归的一个演示图。我们可以看到有很多点,和一根线。这根线就是我们的线性回归模型。我们称之为其是我们的假说。而这些点就是我们的数据集。我们的目标是找到一根线,使得这根线可以最好的拟合这些点(或者说,更好地服从数据点的趋势)。而用线去拟合这些点,我们就称之为回归。
而线性(Linear)则是指这个模型是一个线性函数(Linear function),其可以被定义为:
用一维的例子解释,我们可以简易的认为对于输入的每一个特征
即考虑一维线性函数
如果我们假设
其中
什么是向量?
WIP (简单介绍)
如果你需要复习前面的知识,可以回顾 1.3.1 中的内容。
向量我们可以认为一个有
我们需要从数据集尝试寻找参数使线性函数能够最好的拟合。我们可以定义数据集为:
即数据集是由
用数学语言来描述,我们假设输入数据是一个
而我们的线性函数
那我们应该如何去寻找到最终最佳的$\mathbf{w}$呢?我们需要定义一个函数,叫损失函数。其用于衡量我们的预测值与真实值之间的差距。如果我们能通过某些手段最小化这个损失函数,我们也就相当于让模型可以学习到最佳的$\mathbf{w}$。这个过程就是我们所说的训练过程。
而线性回归模型的损失应该怎么定义呢?相信聪明的朋友已经知道了!我们可以通过计算预测值与真实值之间的差距来定义损失函数。我们可以考虑
如果我们的模型预测的值与真实值之间的距离越小,那么我们的模型就越好。因此我们可以定义距离函数为这两个点的几何距离,即欧式距离:
其中我们将其转化为平方的形式,是因为平方相比于绝对值更容易求导,而且在求导的时候也不会受到绝对值的影响。
而上述式在最后进行平方根运算,而我们在求导的时候会遇到开方的问题,这会使得我们的求导变得复杂。因此我们可以将其转化为平方的形式,是因为平方相比于开方更容易求导,而且在求导的时候也不会受到开方的影响。而其与几何距离函数有着相同的单调性,这也意味着我们可以通过最小化平方距离
因此我们可以定义距离函数为:
而考虑上式只考虑了一个样本,而我们的数据集中有多个样本,因此我们需要对所有的样本求平均值以得到平均损失。因此我们可以定义损失函数
$$ \begin{align} L(y, \hat{y}) &= \frac{1}{n}\sum_{i=1}^{n}(y_i - \hat{y}i)^2\ &= \frac{1}{n}\sum{i=1}^{n}(y_i - \mathbf{w}^T\mathbf{x})^2\ \end{align} $$
因此目前我们尝试寻找一个权重
在完成问题的定义后,我们的目标转化成了最小化成本函数。在高中数学中,我们可以知道:一个函数的极值点只存在于导数为 0 的点。因此如果我们想获得一个参数使损失函数最小化,我们可以对成本函数求其求导数(更严谨来说,是对于成本函数的参数$\mathbf{w}$求偏导)。
什么是偏导数?
WIP (简单介绍,它有两个或者以上自变量,然后我们把一个作为自变量,其他的都视作常数)
如果你需要复习前面的知识,可以回顾 1.3.3 中的内容。
易知该损失函数的极值点是全局最低点,故严格证明暂时略去。
简单来说,对于一个凸函数(convex function),其的全局最小值会出现在其导数为 0 的情况(需要注意的是,凸函数可能会有多个点使其导数为 0,且这些点的函数值均为全局最小值)。而我们的成本函数可以被证明为凸函数,因此我们可以通过对其求导数来获得全局最小值。我们会在后续章节讨论凸函数的性质。
$$ \begin{align}
\frac{\partial J}{\partial \mathbf{w}} &= \frac{\partial}{\partial \mathbf{w}} \frac{1}{2n}\sum_{i=1}^{n}(\mathbf{w}^T\mathbf{x}i - y_i)^2 \ &= \frac{\partial}{\partial \mathbf{w}} \frac{1}{2n}\sum{i=1}^{n}(\mathbf{w}^T\mathbf{x}_i\mathbf{w}^T\mathbf{x}_i + y_i^2-2\mathbf{w}^T\mathbf{x}iy_i) \ &=\frac{1}{2n}\sum{i=1}^{n}(2\mathbf{x}_i^2\mathbf{w}-2\mathbf{x}iy_i) \ &=\frac{1}{n}\sum{i=1}^{n}(\mathbf{x}_i^2\mathbf{w}-\mathbf{x}_iy_i)
\end{align} $$
求其极值点。令其偏导值为 0:
$$ \begin{align}
\frac{\partial J}{\partial \mathbf{w}}&=0\ \frac{1}{n}\sum_{i=1}^{n}(\mathbf{x}_i^2\mathbf{w}-\mathbf{x}iy_i)&=0\ \sum{i=1}^{n}(\mathbf{x}_i^2\mathbf{w}-\mathbf{x}iy_i)&=0\ \sum{i=1}^{n}(\mathbf{x}i^2\mathbf{w})-\sum{i=1}^{n}(\mathbf{x}iy_i)&=0\ \mathbf{w}\sum{i=1}^{n}(\mathbf{x}i^2)-\sum{i=1}^{n}(\mathbf{x}iy_i)&=0\ \mathbf{w}&=\frac{\sum{i=1}^{n}(\mathbf{x}iy_i)}{\sum{i=1}^{n}(\mathbf{x}_i^2)}
\end{align} $$
通过上述操作,我们可以获得最佳的$\mathbf{w}$,这个过程就是我们所说的训练过程。我们可以通过这个过程来训练我们的模型,使得模型可以学习到最佳的$\mathbf{w}$,从而可以对未知的数据进行预测。
由于我们可以通过代数直接获得函数的解析解,我们也称其为封闭解(Closed-form solution)。
需要注意的是并不是所有的问题都拥有封闭解,有些问题可能会有多个解,有些问题可能会有无穷个解,有些问题可能会没有解。而应对这种情况,我们会选择使用迭代的方法来求解(我们又称其为优化(Optimisation))。在后续的章节中,我们会介绍如何使用迭代的方法来求解线性回归问题。