logo

广义加性模型

王哲峰 / 2022-09-23


目录

广义加性模型简介

广义加性模型(GAM)作为回归家族的一个扩展,是最强大的模型之一,可以为任何回归问题建模

线性模型简单、直观、便于理解,但是,在现实生活中,变量的作用通常不是线性的。 线性的假设很可能不能满足实际需求,甚至直接违背实际情况

1985 年 Stone 提出加性模型(additive models),模型中每一个加性项使用单个光滑函数来估计, 在每一个加性项中可以解释因变量如何随自变量变化而变化, 解决了模型中自变量数量较多时,模型的方差会加大问题

1990 年,Hastie 和 Tibshirani 扩展了加性模型的应用范围, 提出了广义加性模型(Generalized Additive Models)

线性回归模型

$$y = \omega_{1} x_{1} + \omega_{2} x_{2} + \ldots + \omega_{n} x_{n} + \sigma$$

其中:

广义加性模型

广义加性回归方程

$$g(y) = \omega_{1}F_{1}(x_{1}) + \omega_{2}F_{2}(x_{2}) + \ldots + \omega_{n}F_{n}(x_{n}) + \sigma$$

其中:

平滑函数

广义加性模型中的 $F_{i}, i = 1, 2, \ldots, n$ 是一组对每个自变量分别建模为目标变量的函数, 称为平滑函数(smoothing functions),将所有这些函数加起来预测 $g(y)$

$F_{i}$ 对于不同的自变量可以采用不同的表示, 对于一个自变量 $x_{i}$$F_{i}$ 可以表示为如下形式:

基函数

基函数(basic functions) 是一组可以用来表示复杂非线性函数的简单函数。

例如,有非线性函数:

$$f(x) = 5 + 2 x^{2}$$

为了表示这个复杂的非线性函数,可以使用基函数集: $f_{1}(x) = 1, f_{2}(x) = x, f_{3}(x) = x^{2}$。 因此非线性函数用基函数表示为:

$$f(x) = 5f_{1}(x) + 0 f_{2}(x) + 2 f_{3}(x)$$

基函数有很多种,最常见的可能就是径向基函数(RBF),此外还有样条函数(Splines)、多项式方程等

多项式方程

径向基函数

样条函数

样条函数

样条函数(Splines)是基函数的一种,它是由多项式分段定义的函数。 分段多项式基本上就是对变量的不同区间有不同表示的多项式

例如:

$$g(x) = \left \{ \begin{array}{rcl} mx + a, & & {x < 5} \\ mx + nx^{2}, & & {5 < x < 10} \\ p x^{3}, & & {x > 10} \\ \end{array} \right.$$

根据 $x$ 的不同区间改变多项式的表示,这样的多项式称为分段多项式。 根据样条的程度,可以有以下可能的基函数,来构造原始的复杂函数 $g(x)$:

样条回归

样条回归是一组基础函数集的加权和,其中使用的基函数是样条函数

$$F_{i}(x_{i}) = \sum_{j}\omega_{j}b_{j}(x_{i}), i = 1, 2, \ldots, n$$

其中:

所以 GAM 方程是(如果只使用样条回归):

$$g(y) = \sum_{k}\omega_{k}b_{k}(x_{1}) + \sum_{m}\omega_{m}b_{m}(x_{2}) + \ldots + \sum_{n}\omega_{n}b_{n}(x_{n}) + \sigma$$

其中:

联系函数

如果自变量和目标变量之间的关系不是线性的,用于线性回归的线程方程就需要一些修改将目标映射到自变量, 这里的映射有可能是非线性关系,所以就需要将目标限制在某个特定范围内,也就是将 $y$ 变为 $g(y)$

这里的 $g(y)$ 称为联系函数(link function),它的作用就是保持目标变量和自变量之间的线性关系。 正如模型的名字,“广义”这个词描述了 GAM 可以满足不同的回归场景,这些场景不需要遵循线性回归的基本假设, 所以这个 $g(\cdot)$ 可以是任何函数

将一个线性回归方程建模为 GAM

GAM 方程:

$$g(y) = \omega_{1}F_{1}(x_{1}) + \omega_{2}F_{2}(x_{2}) + \ldots + \omega_{n}F_{n}(x_{n}) + \sigma$$

如果要将一个线性回归方程建模为 GAM,只需要:

  1. 联系函数设置成恒等函数
  2. $F_{n}$ 设置成恒等函数

也就是说

  1. $g(y) = x$
  2. $F_{i}(x) = x, i = 1, 2, \ldots, n$

所以有:

$$y = \omega_{1}x_{1} + \omega_{2}x_{2} + \ldots + \omega_{n}x_{n} + \sigma$$

GAM Python 库