作为回归家族的一个扩大,狭义加性模型 (GAMs) 是最弱小的模型之一,能够为任何回归问题建模!!
线性模型简略、直观、便于了解,然而,在现实生活中,变量的作用通常不是线性的,线性假如很可能不能满足理论需要,甚至间接违反理论状况。1985 年 Stone 提出加性模型 (additive models),模型中每一个加性项应用单个润滑函数来预计,在每一加性项中能够解释因变量如何随自变量变动而变动,解决了模型中自变量数目较多时,模型的预计方差会加大的问题。1990 年,Hastie 和 Tibshirani 扩大了加性模型的利用范畴,提出了狭义加性模型(generalized additive models)。
你肯定用过线性回归或者多项式回归但说实话,所以让咱们先从线性回归方程开始:
y = ax₁+ bx₂ + cx₃+ …+ zxₙ+ C
狭义加性模型 (GAMs) 是这个样子的:
g(y) = w₁F₁(x₁) + w₂F₂(x₂) + w₃F₃(x₃) …wₙFₙ(xₙ) + C
能够看到,除了咱们的自变量 X 被函数嵌套以外,咱们的因变量 Y 也就是预测也不是“y”自身而是一个函数 g(y)。而 w₁,w₂…wₙ是每个自变量函数的权重
Fₙ是什么? 它是一组每个特色变量别离建模为指标变量的函数,称为平滑函数(smoothing functions),将所有这些函数加起来预测 g(y)。
这个 Fₙ的数学示意是什么呢?Fₙ对于不同的特色变量能够采纳不同的示意。对于一个特色变量,它能够是多项式方程,对于另一个特色变量,它能够是径向基函数(RBF)。
最常见的平滑函数是回归样条函数(Regression Splines),除此以外其余的基函数也能够应用例如 RBF,Tensor,(来自 https://fda.readthedocs.io/en…)等。
这里又呈现了一个新名词“基函数”(Basis functions):基函数是一组能够用来示意简单非线性函数的简略函数。例如假如咱们有 fₓ= 5 + 2x²,为了示意这个简单的非线性函数,咱们能够应用上面的基函数集:f₁(x)= 1, f₂(x)=x, f₃(x)= x²,因而就失去了 fₓ= 5f₁(x) + 0f₂(x) + 2*f₃(x)
基函数有很多种,最常见的可能就是 RBF(SVM 中的核函数)
样条函数(Splines):样条是基函数的一种,它是由多项式分段定义的函数。分段多项式基本上就是对变量的不同区间有不同示意的多项式。看看上面这个例子:
m*x+a → x<5
mx+ nx² → 5<x<10
p*x³ → x>10
依据 X 的不同区间扭转多项式的示意,这样的多项式称为分段多项式。依据样条的水平,咱们能够有以下可能的基函数,来结构原始的简单函数
0 阶: 基函数 = f(x) = 1
1 阶: 基函数 = f(x)=1, f(x)=x
2 阶: 基函数 = f(x)=1, f(x)=x, f(x)=x²
有了下面的根底,咱们开始阐明样条回归。它是一组根底函数集的加权和,其中应用的基函数是样条函数。
Fₙ(xₙ) = Σₖ wₖbₖ(xₙ)
其中
Fₙ= 第 n 个特色的第 n 个平滑函数(还记得下面 GAMs 的方程吗?)
bₖ= 样条回归的第 k 个基函数(因为样条回归由多个基函数组成)
σₖ= 从 k =0→用于示意特色变量和指标变量之间关系的总基函数的总和。
所以 GAMs 方程是(如果只应用样条回归)
g(y) = Σₖ wₖbₖ(x₁) + Σₘ wₘbₘ(x₂) + Σₙ wₙbₙ(xₙ) … + C
这里的 k, m, n 是不同特色的不同样条函数的阶。公式曾经推导进去了,还剩最初一个问题在 GAMs 方程中 g()是什么? 为什么咱们预测的是 g(y)而不是“y”自身?
该解释须要从狭义线性模型(GLM)的定义中寻找。一旦特色变量和指标变量之间的关系不是线性的,咱们用于线性回归的线性方程就须要一些批改将指标映射到特色变量,这里的映射有可能会是非线性关系,所以就须要将指标限度在某个特定范畴内,也就是将 y 变为 g(y)。
这里的 g(y)被称为分割函数(link function):它的作用就是放弃指标变量与特色变量之间的线性关系。正如模型的名字,“狭义”这个词形容了 GAMs 能够满足不同的回归场景,这些场景不须要遵循线性回归的根本假如,所以这个 g()能够是任何函数!!
既然是狭义的,那么如果要将一个线性回归方程建模为 GAM,咱们只须要将:
1、分割函数设置成恒等函数 2、Fₙ设置成恒等函数。
g(y) = w₁F₁(x₁) + w₂F₂(x₂) + w₃F₃(x₃) …wₙFₙ(xₙ) + C
也就是说 g(x)=x 并且 Fₙ(x) =x,那么公式就变成了
y = w₁x₁ + w₂x₂ + w₃x₃ …wₙxₙ
这不就是咱们的线性回归方程么
如果你想更具体的钻研 GAM,那么这里举荐一个库 pygam,他是 Python 中的 GAM 的实现,它的文档十分具体,如果有趣味的话倡议仔细阅读:https://pygam.readthedocs.io/…
https://avoid.overfit.cn/post/ef3f8a5743d84b4d879b74cd92bb12d5
作者:Mehul Gupta