GAM-广义加性模型
广义加性模型(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–Box 与 Jarque–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_splines、spline_degree、lam等;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_splines和lam会直接影响曲线平滑程度,论文讨论变量非线性效应时应同时报告;- 当前切分方式是随机切分,不是时间滚动切分;
- 若
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 的真实工作表:
Parameters、Estimation、Coefficients、Diagnostics、Forecast、PartialDependence、Charts。 - 图题应优先绑定
results根目录中与该轮结果对应的一组实体图:fit_vs_true_20260329_165424.png、pd_x1_20260329_165424.png、pd_x2_20260329_165424.png、pd_x3_20260329_165424.png、pd_x4_20260329_165424.png、pd_x5_20260329_165424.png、pd_y_bin_20260329_165424.png、pd_y_cnt_20260329_165424.png、resid_hist_20260329_165424.png、resid_qq_20260329_165424.png、resid_acf_20260329_165424.png、resid_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,真实工作表为Parameters、Estimation、Coefficients、Diagnostics、Forecast、PartialDependence、Charts。 - 当前与该轮结果对应的实体图片已经落在同一目录中,真实文件为
fit_vs_true_20260329_165424.png、pd_season_20260329_165424.png、pd_x1_20260329_165424.png、pd_x2_20260329_165424.png、pd_x3_20260329_165424.png、pd_x4_20260329_165424.png、pd_x5_20260329_165424.png、pd_y_bin_20260329_165424.png、pd_y_cnt_20260329_165424.png、resid_acf_20260329_165424.png、resid_hist_20260329_165424.png、resid_pacf_20260329_165424.png、resid_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。 - 正文解释应把
Parameters、Estimation、Coefficients、Diagnostics、Forecast、PartialDependence、Charts与对应pd_*.png成组引用,尤其是PartialDependence不能只写成理论章节。 - 旧时间戳误写的
165416图号应统一按当前磁盘事实修正为165424。 results根目录中的repro_gam_template_20260329_165418.py + repro_inputs/sample_data.csv仍然是复现实验入口,正文里要和正式 xlsx、图文件分开写。