From Linear Model to Generalized Linear Model-Part 1

pdf版本下载地址
前一阵在一个机器学习的qq群里听了一位妹子做关于线性模型的tutorial,我就按着自己的理解把线性模型的资料窜一下。

1 引入

我们知道,在机器学习模型中最基础的就是线性模型,无论是有计算机科学味道的机器学习书籍(如PRML)还是统计系味道较重的统计学习书籍(如ESL),或者是各位大神(Andrew Ng, Eric Xing…)的机器学习课程都是先从线性模型还是讲起,可见其基础性。本文先从基本的线性模型,到指数家族,最后谈广义线性模型,以及众多广义线性模型的例子。

2 用于回归问题的线性模型

2.1 模型定义

有监督学习是指通过训练数据学到一个model使得其在测试数据上面能够表现的很好。而回归问题中我们想学到的模型就是一个超平面,我们希望这个超平面能够很好地来fit我们的训练数据。假设我们的输入的一个数据是$x$,这里的$x$是一个向量,每一维度代表这个数据的一个属性即$x_i \in R$,而且$x\in R$,输出是$y$,首先分析一下向量$x$的所有可能取值:

  • 原本的数据
  • 原始数据的一些变化,比如:log,exp等
  • 平方,三次方等
  • 不同元素之间的关系,如:$x_3 = x_1 \cdot x_2$

既然建立起$x$,一个很直观的想法就是我希望$y$与$x$是一个近似的线性关系。因此,我们定义一个近似$y$的线性函数:
$$h_\theta \left(x\right) = \sum_{i=0}^{n} \theta_i x_i = \theta^Tx$$
其中,$\theta_i$是参数,可以理解成对每一个 $x_i \in R$ 的一个权重,定义了这个模型,我们接下来希望通过$x$和$y$来获得这些参数。因此,我们定义了一个损失函数 $J\left(\theta \right)$,我们希望平均下来对于每一个$x$输出的$y$及其预测的$h\left(x\right)$之间的平均误差最小。
$$J\left(\theta \right) = \frac{1}{2} \sum_{i=1}^{m}\left(h_\theta\left(x^{(i)}\right)-y^{(i)}\right)^2$$
在这个式子中$x^{(i)}$和$y^{(i)}$分别代表第$i$个数据的输入和输出。我们可以看出,其实这个函数就是中学学到的最小二乘模型。既然目标函数出来了,我们就需要用一些优化方面的技术来求解我们的参数。

2.2 求解模型

2.2.1 直接求解

我们可以看出,我们的目标函数是个凸函数,我们把目标函数写成向量的形式,如下:
$$J\left(\theta \right) = \frac{1}{2}\left(X\theta - y\right)^T\left(X\theta - y\right)$$
这里我们定义$X = $
\begin{bmatrix}
—(x^{(1)})^T— \\
—(x^{(2)})^T— \\
: \\
: \\
—(x^{(m)})^T—
\end{bmatrix}
m是指训练数据的数量。每一个$x^{(i)}分别指一个数据$
\begin{aligned}\end{aligned}
$$\bigtriangledown_{\theta} J\left(\theta\right) = X^T\left(X\theta - y\right)$$
设偏导数为0,则
$$\theta = \left(X^TX\right)^{-1}X^Ty$$
这么轻松就得到了$\theta$的值了,得到$\theta$后,我们看一下对于我们的训练数据$X$,我们可以通过下面这个式子得到对应的$\hat{y}$。
$$\hat{y} = X \theta = X\left(X^TX\right)^{-1}X^Ty$$
我们可以看到,$y$与$\hat{y}$直接是通过一个矩阵来进行映射,我们把矩阵$H=X\left(X^TX\right)^{-1}X^T$这个矩阵称为帽子矩阵(hat matrix)。这里我们停下来分析一下这个式子的几何意义,
在一个m维的空间里,$y$就是一个点,所有的$x^{(i)}$ span 出一个平面。我们的目标就是在这个平面上面搜寻出一个点,使得$y$到这个点的距离最小,因此,最好的点就是$y$到平面的最短距离。

由Gauss-Markov定理可得,这里我们得到的$y_{target}$是对$y$的无偏估计。

Gauss-Markov定理:$\theta$的最小二乘估计在所有线性无偏估计中方差最小。

life is really easy?我们仔细观察,这里存在两个问题:

(1)在我们得到最后关于$\theta$的表达式中有一项矩阵求逆,所以,当$X^TX$不能求逆(奇异矩阵)时,即使咱们能得到$\theta$的表达式,也是白搭嘛。有哪些情况呢?如:$x_i$和$x_j$之间有线性关系。这时候怎么办呢,我们需要对$\theta$加一些约束条件。后面有说$LASSO$或者$Ridge$ $Regression$(这里就不再是无偏估计了,我们希望用“有偏”来换取较小的均方误差(MSE))
(2)即使用了预处理(特征选择等)什么天马行空的方法,这个矩阵能求逆,当每一个$x^{(i)}$的维数很高时,我们发现,即使简单地求一下$X^TX$都很耗时。看来,我们需要找到更快的解决方法,这就是接下来要说基于梯度的方法。

2.2.2 基于梯度的方法

基于梯度的方法基本思想是,既然我不能一次性找到最优的solution,那我慢慢找,通过一个学习法则来找,每一步都满足使得目标函数有一定的提高。这样我们的第一个方法就是梯度下降法,初始化一组参数$\theta$,对于一个训练数据,我们通过如下迭代$\theta$:
$$\theta_j:=\theta_j - \alpha \frac{\partial}{\partial \theta_j}J\left(\theta\right)$$
通过求导可以得到
$$\theta_j:=\theta_j + \alpha \left(y^{(i)}-h_\theta\left(x^{(i)}\right)\right)x_j^{(i)}$$
由于我们训练样本有$m$个数据,我们迭代的公式即为:
$$\theta_j:=\theta_j + \alpha \sum_{i=1}^{m} \left(y^{(i)}-h_\theta\left(x^{(i)}\right)\right)x_j^{(i)}$$

在这个方法中,每次我们更新一次$\theta$,都要穷举所有的训练样本,因此,这类算法被称为批梯度下降(batch gradient descent)。可想而知,这种算法耗时很长,何不如每次仅考虑一个数据来对$\theta_j$进行更新呢?这就是下面的随机梯度下降(stochastic gradient descent)。

循环直至收敛{
对训练集每一个数据进行操作{
$$\theta_j:=\theta_j + \alpha \left(y^{(i)}-h_\theta\left(x^{(i)}\right)\right)x_j^{(i)}$$
}
}

2.3 结果的思考

通过上面的求解,我们可以直接或者间接得到$\theta$的值,在原来当我们设计模型的时候,我们希望$y\approx h_{\theta} \left(x\right)$,实际上,他们直接有一个误差$\epsilon$,我想现在换一个角度考虑,我直接对$y$跟$x$的关系进行建模,因此,
$$y^{(i)} = h_{\theta} \left(x^{(i)}\right) + \epsilon^{(i)}$$
$\epsilon$服从一个分布函数。

在这里有一个结论,
如果$\epsilon^{(i)}$之间独立同分布(IID),并且服从一个均值为0,方差为$\sigma ^{2}$的高斯分布。
$$p\left(\epsilon^{(i)} \right) = \frac{1}{\sqrt{2\pi}\sigma}exp\left(-\frac{\left(\epsilon^{(i)}\right)^{2}}{2 \sigma ^{2}}\right)$$
将$\epsilon^{(i)}$代入,我们可以得到,
$$p\left(y^{(i)}|x^{(i)};\theta \right) = \frac{1}{\sqrt{2\pi}\sigma}exp\left(-\frac{\left(y^{(i)} - h_{\theta} \left(x^{(i)}\right)\right)^{2}}{2 \sigma ^{2}}\right)$$
因为训练数据中样本之间关系是IID的,我们可以最大化似然估计(MLE),似然函数为:
\begin{aligned}
L\left(\theta \right) = L\left(\theta;X,\vec{y} \right) = p\left(\vec{y} | X;\theta \right)
= \prod_{i=1}^{m} \frac{1}{\sqrt{2\pi}\sigma}exp\left(-\frac{\left(y^{(i)} - h_{\theta} \left(x^{(i)}\right)\right)^{2}}{2 \sigma ^{2}}\right)\\
\end{aligned}
我们想最大化似然函数,这样就意味着最大化$exp$括号里的式子。可以观测到,里面的式子其实就正比于我们之前的损失函数。而这里,我们最后选取的参数$\theta$跟$\sigma$之间没有关系。这个现象比较有趣,我们将在以后讨论广义线性模型时讨论到它。

2.4 更一般化的损失函数

在最小二乘里面,我们定义损失函数是通过$l_2$范数,我们可以得到最小化它与$y|x \sim Gauss$所得到的最大化似然函数等价。这里我们若把$l_2$范数改为$l_1$范数或者$l_0$范数呢?它们对应的损失函数分别称为:平方损失,绝对损失和0-1损失。这里我们简单地看一下三个损失函数在描述样本集中趋势的意义:
平方损失:
$$min_{\theta} ||X-\theta||^2$$
绝对损失:
$$min_{\theta} |X-\theta|$$
0-1损失:
$$min_{\theta} 1\left(X \neq\theta \right)$$
我们可以看到,在描述样本时,其实它们分别表示:平均数,中位数和众数。
另外,在$l_1$范数的损失函数的情况下,最小化损失函数其实就是最大化Laplace分布下的似然函数:
$$max_{\beta} \prod_{i} \frac{m}{2} exp \left(-m \sum_i|y_i-x_i^T\beta|\right)$$

2.5 带有惩罚项的目标函数

在我们做回归问题的时候,为了使得我们的模型有着较强的表达能力,我们建立的$x$包含了原本数据的1-9次方,这样通过构建损失函数学出来的模型在未来测试数据上很大可能会过拟合(overfit)。这时候我们希望对参数$\theta$加一些约束,如$l_1$,$l_2$ 范数。这种方法在统计系被称为Shrinkage方法,当然,引入它的理由不仅仅是为了防止过拟合,很多时候保留或者舍弃一些feature可以使得模型更直观(intuitive),这里我们讨论两种模型,岭回归(Ridge Regression)和LASSO。

2.5.1 Ridge Regression

Ridge Regression是指我在目标函数里面加上参数的$l_2$范数,这里我们的目标函数就变成:
$$J\left(\theta \right) = \frac{1}{2} \sum_{i=1}^{m}\left(h_\theta\left(x^{(i)}\right)-y^{(i)}\right)^2 + \lambda||\theta||_2$$
因此,我们得到
$$\theta = \left(X^TX+\lambda I\right)^{-1}X^Ty$$

2.5.2 LASSO

LASSO是指我在目标函数里面加上参数的$l_1$范数
$$J\left(\theta \right) = \frac{1}{2} \sum_{i=1}^{m}\left(h_\theta\left(x^{(i)}\right)-y^{(i)}\right)^2 + \lambda|\theta|_1$$
如何求解呢?
求次梯度啊,MP,OMP。。等等。上学期压缩感知学了一学期的这方面的算法和应用。To be writed!