正在加载中...

展开本页目录
算法教程GAM-广义加性模型

GAM-广义加性模型

No.045 · 在线教程

广义加性模型(Generalized Additive Model, GAM)是对广义线性模型(GLM)的扩展,它通过非参数平滑函数刻画特征与响应变量之间的非线性关系,同时保持模型的可解释性。

GAM-广义加性模型

1. 方法概述

广义加性模型(Generalized Additive Model, GAM)是对广义线性模型(GLM)的扩展,它通过非参数平滑函数刻画特征与响应变量之间的非线性关系,同时保持模型的可解释性。

设共有 \(n\) 个样本、\(d\) 个特征,数据集为:

$$ \mathcal{D}=\{(x_i, y_i)\}_{i=1}^{n},\quad x_i\in\mathbb{R}^d \tag{1} $$

GAM 的核心形式为:

$$ g\big(\mathbb{E}[y\mid x]\big)=\beta_0+\sum_{j=1}^{d} f_j(x_j) \tag{2} $$

其中 \(g(\cdot)\) 为链接函数,\(f_j(\cdot)\) 为第 \(j\) 个特征的平滑函数。

2. 样条基函数表示

系统采用 B-spline 作为平滑基函数,将 \(f_j(x_j)\) 表示为基函数的线性组合:

$$ f_j(x_j)=\sum_{k=1}^{K_j}\theta_{jk} B_{jk}(x_j) \tag{3} $$

将所有特征的样条基函数拼接后,模型可写成:

$$ \eta=\beta_0+\mathbf{B}(x)\,\theta \tag{4} $$

其中 \(\eta=g(\mu)\),\(\mu=\mathbb{E}[y\mid x]\),\(\mathbf{B}(x)\) 为样条基矩阵。

3. 平滑惩罚与估计

为避免过拟合,对样条系数加入平滑惩罚项,GAM 的目标函数写为:

$$ \mathcal{L}=\ell(\beta,\theta)-\frac{\lambda}{2}\sum_{j=1}^{d}\theta_j^\top \mathbf{S}_j\theta_j \tag{5} $$

其中 \(\ell(\cdot)\) 为对数似然,\(\lambda\) 为平滑惩罚强度(系统参数 \(\text{lam}\)),\(\mathbf{S}_j\) 为第 \(j\) 个平滑项的惩罚矩阵。

4. 家族与链接函数

GAM 继承 GLM 的分布族设定,系统支持:

  • Gaussian(连续型):\(g(\mu)=\mu\)
  • Binomial(二分类):\(g(\mu)=\log\frac{\mu}{1-\mu}\)
  • Poisson(计数型):\(g(\mu)=\log \mu\)

对应公式表示为:

$$ \mu=g^{-1}(\eta) \tag{6} $$

$$ \text{Gaussian: } g(\mu)=\mu \tag{7} $$

$$ \text{Binomial: } g(\mu)=\log\frac{\mu}{1-\mu} \tag{8} $$

$$ \text{Poisson: } g(\mu)=\log \mu \tag{9} $$

5. 训练/测试切分与预测

系统采用随机划分训练集与测试集,训练比例 \(r\in(0,1]\):

$$ \mathcal{D}_{train}:\mathcal{D}_{test}=r:(1-r) \tag{10} $$

预测的均值及其置信区间(均值区间)为:

$$ \hat{\mu}_i\pm z_{1-\alpha/2}\,\text{SE}(\hat{\mu}_i) \tag{11} $$

其中 \(\alpha\) 为显著性水平(系统参数 \(\text{alpha}\))。

6. 部分依赖(Partial Dependence)

对单个特征 \(x_j\) 取网格,其他特征固定为中位数 \(\tilde{x}_{-j}\),得到部分依赖曲线:

$$ \widehat{f}_j(x)=g^{-1}\Big(\hat{\beta}_0+\hat{f}_j(x)+\sum_{k\ne j}\hat{f}_k(\tilde{x}_k)\Big) \tag{12} $$

系统对每个特征输出 \(\widehat{f}_j(x)\) 曲线及置信区间。

7. 评价指标

7.1 Gaussian(连续型)

均方误差(MSE) $$ \text{MSE}=\frac{1}{n}\sum_{i=1}^{n}(y_i-\hat{y}_i)^2 \tag{13} $$

均方根误差(RMSE) $$ \text{RMSE}=\sqrt{\text{MSE}} \tag{14} $$

平均绝对误差(MAE) $$ \text{MAE}=\frac{1}{n}\sum_{i=1}^{n}|y_i-\hat{y}_i| \tag{15} $$

决定系数(R\(^2\)) $$ R^2=1-\frac{\sum_{i=1}^{n}(y_i-\hat{y}_i)^2}{\sum_{i=1}^{n}(y_i-\bar{y})^2} \tag{16} $$

7.2 Binomial(二分类)

准确率(Accuracy) $$ \text{Acc}=\frac{TP+TN}{TP+TN+FP+FN} \tag{17} $$

AUC(ROC 曲线下面积) $$ \text{AUC}=\int_0^1 TPR(FPR)\,d(FPR) \tag{18} $$

7.3 Poisson(计数型)

系统输出 RMSE 与 MAE(同式(14)–(15))。

8. 残差诊断

系统输出 Ljung–BoxJarque–Bera 检验:

Ljung–Box 统计量 $$ Q=n(n+2)\sum_{k=1}^{m}\frac{\rho_k^2}{n-k} \tag{19} $$

Jarque–Bera 统计量 $$ JB=\frac{n}{6}\Big(S^2+\frac{(K-3)^2}{4}\Big) \tag{20} $$

其中 \(\rho_k\) 为残差自相关,\(S\) 为偏度,\(K\) 为峰度。

9. 输出结果(Excel / 图表)

系统导出 Excel 多表与图表文件,主要包括:

Excel Sheets:

  • Parameters(参数)
  • Estimation(样本量 / AIC / BIC / 指标)
  • Coefficients(系数 / 标准误 / t / p / CI)
  • Diagnostics(诊断检验结果)
  • Forecast(训练/测试预测与置信区间)
  • PartialDependence(部分依赖曲线数据)
  • Charts(图表索引与路径)

图表输出:

  • 拟合值 vs 真实值
  • 残差分布 / QQ / ACF / PACF
  • 各特征部分依赖曲线
  • (Binomial)ROC 曲线

10. 与代码实现的对应关系

本算法在程序中由 具体的算法2/GAM-广义加性模型/core/calculator.py 实现,核心依赖是 GLMGam + BSplines。因此文档和论文应突出“平滑项 + 可解释输出”,而不是把它写成普通 GLM。

10.1 程序实际导出的工作表

  • Parameters:目标列、特征列、family、link、n_splinesspline_degreelam 等;
  • Estimation:样本量、AIC/BIC、训练/测试指标等;
  • Coefficients:系数、标准误、t 值、p 值、区间;
  • Diagnostics:Ljung-Box、Jarque-Bera 等结果;
  • Forecast:训练集/测试集预测值及区间;
  • PartialDependence:每个特征的部分依赖取点与区间;
  • Charts:图表索引与路径。

10.2 程序实际生成的图表

  • 连续型任务:真实值与预测值对比、残差分布、QQ 图、ACF/PACF;
  • 二分类任务:概率曲线、ROC 曲线;
  • 可解释输出:单变量部分依赖曲线及置信区间。

10.3 程序实现中应写入论文的方法细节

  • 平滑项是 B-spline 基函数展开,不是黑箱神经网络;
  • 预测区间来自 summary_frame(alpha=alpha),属于模型均值估计区间;
  • PartialDependence 是程序显式计算并导出的结果表,而不是后处理截图;
  • family 不同,评价指标与图表会随之变化,结果部分必须与所选 family 保持一致;
  • Binomial 场景下若存在 ROC 图,说明程序走的是概率输出路径。

10.4 实现说明与注意事项

  • n_splineslam 会直接影响曲线平滑程度,论文讨论变量非线性效应时应同时报告;
  • 当前切分方式是随机切分,不是时间滚动切分;
  • PartialDependence 为空,通常表示当前运行未成功生成相应曲线,应先检查特征类型或样条配置;
  • Charts 是图表索引表,适合在论文附录中统一管理插图来源。

11. 参数表(系统实现)

参数 含义 典型范围/说明
target 目标列 数值型列名
features 特征列 数值型列名列表
family 分布族 gaussian / binomial / poisson
link 链接函数 auto(采用 family 默认)
n_splines 每个特征样条基数量 建议 6–20
spline_degree 样条阶数 常用 3(范围 1–5)
lam 平滑惩罚强度 0 表示不惩罚,越大越平滑
include_intercept 是否包含截距 True/False
train_ratio 训练集比例 0.5–1.0
split_method 切分方式 目前仅支持 random
random_state 随机种子 复现用
alpha 置信区间显著性水平 常用 0.05
output_file 输出路径 为空则自动生成

12. 符号说明表(详细)

符号 含义
\(n\) 样本数量
\(d\) 特征维度
\(x_i\) 第 \(i\) 个样本特征向量
\(x_j\) 第 \(j\) 个特征
\(y_i\) 第 \(i\) 个样本响应
\(\mu\) 条件均值 \(\mathbb{E}[y\mid x]\)
\(\eta\) 线性预测子 \(\eta=g(\mu)\)
\(g(\cdot)\) 链接函数
\(f_j(\cdot)\) 第 \(j\) 个特征的平滑函数
\(B_{jk}(\cdot)\) 第 \(j\) 个特征第 \(k\) 个样条基函数
\(K_j\) 第 \(j\) 个特征样条基数量
\(\theta_{jk}\) 样条系数
\(\mathbf{B}(x)\) 样条基矩阵
\(\beta_0\) 截距项
\(\lambda\) 平滑惩罚系数(lam)
\(\mathbf{S}_j\) 第 \(j\) 个平滑项的惩罚矩阵
\(z_{1-\alpha/2}\) 正态分位数(置信区间)
\(\alpha\) 置信区间显著性水平
\(TP,FP,TN,FN\) 二分类混淆矩阵元素
\(S,K\) 残差偏度与峰度

13. 论文写作模板

方法段落模板:
本研究采用广义加性模型(GAM)构建 \(y\) 与多维特征 \(x\) 之间的非线性关系,模型形式见式(2)。各特征效应由 B-spline 平滑函数表示(式(3)–(5)),并通过平滑惩罚项控制模型复杂度。样本按训练集比例 \(r\) 随机划分(式(10)),在训练集上估计参数并生成预测与置信区间(式(11))。同时输出部分依赖曲线以解释各变量的非线性影响(式(12))。

结果段落模板:
模型拟合后,系统输出 AIC/BIC、残差诊断与预测误差指标。对于连续型响应,使用 RMSE、MAE 与 \(R^2\) 评估拟合优度(式(13)–(16));对于二分类响应,报告准确率与 AUC(式(17)–(18))。部分依赖曲线显示关键变量在不同取值区间对响应的边际影响,并结合残差 Ljung–Box 与 Jarque–Bera 检验(式(19)–(20))评价模型的稳健性与残差分布特性。

13. 注意事项

  • GAM 适用于样本量中等以上、存在非线性关系的场景;
  • 样条基数量 \(K_j\) 过大易过拟合,过小则欠拟合;
  • 二分类任务要求 \(y\in\{0,1\}\),计数任务要求 \(y\ge 0\);
  • 若出现异常残差或 ACF/PACF 显著性偏大,可调整 \(\lambda\)、样条阶数或特征集合。

14. 单篇终审补充

14.1 图题与表题对齐建议

  • 本文档应优先对应真实算法目录 具体的算法2/GAM-广义加性模型
  • 代表性结果表建议绑定 具体的算法2/GAM-广义加性模型/results/GAM-广义加性模型分析结果_20260329_165420/GAM-广义加性模型分析结果_20260329_165420.xlsx
  • 表题应直接对应该 xlsx 的真实工作表:ParametersEstimationCoefficientsDiagnosticsForecastPartialDependenceCharts
  • 图题应优先绑定 results 根目录中与该轮结果对应的一组实体图:fit_vs_true_20260329_165424.pngpd_x1_20260329_165424.pngpd_x2_20260329_165424.pngpd_x3_20260329_165424.pngpd_x4_20260329_165424.pngpd_x5_20260329_165424.pngpd_y_bin_20260329_165424.pngpd_y_cnt_20260329_165424.pngresid_hist_20260329_165424.pngresid_qq_20260329_165424.pngresid_acf_20260329_165424.pngresid_pacf_20260329_165424.png

14.2 终审说明

  • GAM 当前存在“结果总表在时间戳子目录、图与 repro 在 results 根目录按时间戳平铺”的历史结构,因此文档中应分别说明结果表来源与图像来源。
  • 复现脚本可引用 repro_gam_template_20260329_165418.py,其 SRC_FILE 写法为 repro_inputs/sample_data.csv,属于“脚本同目录下 repro_inputs 子目录”口径。
  • 由于图文件时间戳为 165424、结果表时间戳为 165420、复现脚本时间戳为 165418,正文和附录应写成“同轮 GAM 导出产物”,不要误写成完全同名同秒生成。

14.3 全量强化补充

  • 当前 GAM 文档应绑定真实算法目录 具体的算法2/GAM-广义加性模型,代表性主结果目录为 具体的算法2/GAM-广义加性模型/results/GAM-广义加性模型分析结果_20260329_165420
  • 该目录首层主工作簿为 GAM-广义加性模型分析结果_20260329_165420.xlsx,真实工作表为 ParametersEstimationCoefficientsDiagnosticsForecastPartialDependenceCharts
  • 当前与该轮结果对应的实体图片已经落在同一目录中,真实文件为 fit_vs_true_20260329_165424.pngpd_season_20260329_165424.pngpd_x1_20260329_165424.pngpd_x2_20260329_165424.pngpd_x3_20260329_165424.pngpd_x4_20260329_165424.pngpd_x5_20260329_165424.pngpd_y_bin_20260329_165424.pngpd_y_cnt_20260329_165424.pngresid_acf_20260329_165424.pngresid_hist_20260329_165424.pngresid_pacf_20260329_165424.pngresid_qq_20260329_165424.png
  • 旧文中把这组图误写成 165416 时间戳,当前磁盘证据显示应统一修正为 165424。正文和附录若引用图文件名,应以 165424 为准。
  • 当前主结果目录本身未见 repro 脚本;复现入口位于 results 根目录中的 repro_gam_template_20260329_165418.py,其关键输入写法为 SRC_FILE = 'repro_inputs/sample_data.csv'。这说明 GAM 的复现链属于“根目录脚本 + 根目录下 repro_inputs”结构。
  • 因此 GAM 当前应分三层说明:时间戳结果目录用于承接正式 xlsx,结果目录中的同轮 165424 图片用于承接图表,results 根目录下的 repro_gam_template_20260329_165418.py + repro_inputs/sample_data.csv 用于承接复现实验。
  • 若论文解释部分依赖图,应优先将 PartialDependence 工作表与 pd_*.png 配对引用,而不是只写图不写表。

15. 软件实现核查补充(2026-07)

  • 当前实现的主结果目录应写作 具体的算法2/GAM-广义加性模型/results/GAM-广义加性模型分析结果_20260329_165420,主工作簿为 GAM-广义加性模型分析结果_20260329_165420.xlsx
  • 正文解释应把 ParametersEstimationCoefficientsDiagnosticsForecastPartialDependenceCharts 与对应 pd_*.png 成组引用,尤其是 PartialDependence 不能只写成理论章节。
  • 旧时间戳误写的 165416 图号应统一按当前磁盘事实修正为 165424
  • results 根目录中的 repro_gam_template_20260329_165418.py + repro_inputs/sample_data.csv 仍然是复现实验入口,正文里要和正式 xlsx、图文件分开写。