文章目录
引言
在线性回归中,我们假设因变量与特征之间的关系是线性关系,这样的假设使得模型很简单,但是缺点也是显然的,那就是当数据存在非线性关系时,我们使用线性回归模型进行预测会导致预测性能极其低下,因为模型的形式本身是线性的,无法表达数据中的非线性关系。我们一个很自然的想法就是去推广线性回归模型,使得推广后的模型更能表达非线性的关系。常用的手段有多项式回归与广义可加模型(GAM)。
1.多项式回归
为了体现因变量和特征的非线性关系,一个很自然而然的想法就是将标准的线性回归模型:
𝑦i=𝑤0+𝑤1𝑥i+𝜖i
转换成一个多项式函数:
𝑦i=𝑤0+𝑤1𝑥i+𝑤2𝑥i+…+𝑤d𝑥di+𝜖
对于多项式的阶数d不能取过大,一般不大于3或者4,因为d越大,多项式曲线就会越光滑,在X的边界处有异常的波动,预测效果的稳定性下降。
2.广义可加模型(GAM)
广义可加模型GAM实际上是线性模型推广至非线性模型的一个框架,在这个框架中,每一个变量都用一个非线性函数来代替,但是模型本身保持整体可加性。GAM模型不仅仅可以用在线性回归的推广,还可以将线性分类模型进行推广。具体的推广形式是:
标准的线性回归模型:
𝑦i=𝑤0+𝑤1𝑥i1+…+𝑤p𝑥ip+𝜖i
GAM模型框架:
𝑦i=𝑤0+∑𝑓j(𝑥ij)+𝜖i
GAM模型的优点与不足:
优点:简单容易操作,能够很自然地推广线性回归模型至非线性模型,使得模型的预测精度有所上升;由于模型本身是可加的,因此GAM还是能像线性回归模型一样把其他因素控制不变的情况下单独对某个变量进行推断,极大地保留了线性回归的易于推断的性质。
缺点:GAM模型会经常忽略一些有意义的交互作用,比如某两个特征共同影响因变量,不过GAM还是能像线性回归一样加入交互项 𝑥(𝑖)×𝑥(𝑗) 的形式进行建模;但是GAM模型本质上还是一个可加模型,如果我们能摆脱可加性模型形式,可能还会提升模型预测精度,详情请看后面的算法。
from pygam.datasets import wage
from pygam import LinearGAM, s, f
# 加载数据集(3000, 3) (3000,)
x, y = wage()
# 对前两个特征拟合一个spline term,对第三个特征拟合一个factor term
gam = LinearGAM(s(0) + s(1) + f(2)).fit(x, y)
gam.summary() # 展示模型结构
LinearGAM
=============================================== ==========================================================
Distribution: NormalDist Effective DoF: 25.1911
Link Function: IdentityLink Log Likelihood: -24118.6847
Number of Samples: 3000 AIC: 48289.7516
AICc: 48290.2307
GCV: 1255.6902
Scale: 1236.7251
Pseudo R-Squared: 0.2955
==========================================================================================================
Feature Function Lambda Rank EDoF P > x Sig. Code
================================= ==================== ============ ============ ============ ============
s(0) [0.6] 20 7.1 5.95e-03 **
s(1) [0.6] 20 14.1 1.11e-16 ***
f(2) [0.6] 5 4.0 1.11e-16 ***