用 GAM 学习非线性变换

R 中的监督学习:回归

Nina Zumel and John Mount

Win-Vector, LLC

广义可加模型(GAM)

$$ y \sim b0 + s1(x1) + s2(x2) + .... $$

R 中的监督学习:回归

学习非线性关系

R 中的监督学习:回归

mgcv 包中的 gam()

gam(formula, family, data)

family:

  • gaussian(默认):"常规"回归
  • binomial:概率
  • poisson/quasipoisson:计数

更适合较大的数据集

R 中的监督学习:回归

s() 函数

anx ~ s(hassles)
  • s() 指定变量为非线性
  • s() 用于连续变量
    • 唯一值多于约 10 个
R 中的监督学习:回归

回顾 hassles 数据

R 中的监督学习:回归

回顾 hassles 数据

模型 RMSE(交叉验证) $R^2$(训练)
线性($hassles$) 7.69 0.53
二次($hassles^2$) 6.89 0.63
三次($hassles^3$) 6.70 0.65
R 中的监督学习:回归

hassles 数据的 GAM

model <- gam(
  anx ~ s(hassles), 
  data = hassleframe, 
  family = gaussian
)

summary(model)
...

R-sq.(adj) =  0.619   Deviance explained = 64.1%
GCV = 49.132  Scale est. = 45.153    n = 40
R 中的监督学习:回归

检查变换

plot(model)

$y$ 值:predict(model, type = "terms")

R 中的监督学习:回归

模型预测

predict(model, newdata = hassleframe, type = "response")

R 中的监督学习:回归

对比样本外表现

已知正确变换最好;未知时可用 GAM 学习

模型 RMSE(交叉验证) $R^2$(训练)
线性($hassles$) 7.69 0.53
二次($hassles^2$) 6.89 0.63
三次($hassles^3$) 6.70 0.65
GAM 7.06 0.64
  • 样本小 → GAM 更噪声
R 中的监督学习:回归

Passons à la pratique !

R 中的监督学习:回归

Preparing Video For Download...