GLM-广义线性模型
广义线性模型(Generalized Linear Model, GLM)将线性预测器与指数族分布结合,通过连接函数将均值与线性组合联系起来,可统一处理回归与二分类(逻辑回归)等问题。本系统实现:
GLM-广义线性模型
1. 方法概述
广义线性模型(Generalized Linear Model, GLM)将线性预测器与指数族分布结合,通过连接函数将均值与线性组合联系起来,可统一处理回归与二分类(逻辑回归)等问题。本系统实现:
- 回归:gaussian(identity)、poisson(log)、gamma(log)
- 二分类:binomial(logit)
- 支持 one-hot、缺失处理、样本权重、offset、训练/测试划分
- 输出参数估计、置信区间、拟合统计、预测结果与图表
设样本为
$$ \mathcal{D}=\{(x_i,y_i)\}_{i=1}^{n},\quad x_i\in\mathbb{R}^d \tag{1} $$
其中 \(y_i\) 为响应变量(回归或二分类)。
2. GLM 统一形式
2.1 指数族分布
$$ f(y\mid\theta,\phi)=\exp\left(\frac{y\theta-b(\theta)}{a(\phi)}+c(y,\phi)\right) \tag{2} $$
其中 \(\theta\) 为自然参数,\(\phi\) 为离散/尺度参数。
2.2 线性预测器与连接函数
$$ \eta_i=\beta_0+\sum_{j=1}^d \beta_j x_{ij}+\text{offset}_i \tag{3} $$
$$ g(\mu_i)=\eta_i,\quad \mu_i=\mathbb{E}(y_i) \tag{4} $$
2.3 方差函数
$$ \mathrm{Var}(y_i)=\phi\,V(\mu_i) \tag{5} $$
2.4 对数似然
$$ \ell(\beta)=\sum_{i=1}^n\frac{y_i\theta_i-b(\theta_i)}{a(\phi)}+c(y_i,\phi) \tag{6} $$
3. 参数估计(IRLS 迭代加权最小二乘)
GLM 常用 IRLS 求解,可写成加权最小二乘形式。
3.1 工作响应与权重
$$ z_i=\eta_i+\frac{y_i-\mu_i}{\mathrm{d}\mu_i/\mathrm{d}\eta_i} \tag{7} $$
$$ w_i=\frac{1}{\mathrm{Var}(y_i)}\left(\frac{\mathrm{d}\mu_i}{\mathrm{d}\eta_i}\right)^2 \tag{8} $$
3.2 更新公式
$$ \beta^{(t+1)}=(X^\top W X)^{-1}X^\top W z \tag{9} $$
3.3 置信区间(Wald)
$$ \hat\beta_j\pm z_{1-\alpha/2}\,\mathrm{SE}(\hat\beta_j) \tag{10} $$
4. 家族与连接函数(系统实现)
4.1 Gaussian + Identity(回归)
$$ g(\mu)=\mu \tag{11} $$
4.2 Binomial + Logit(二分类)
$$ g(\mu)=\log\frac{\mu}{1-\mu} \tag{12} $$
4.3 Poisson + Log(计数回归)
$$ g(\mu)=\log(\mu) \tag{13} $$
4.4 Gamma + Log(正值回归)
$$ g(\mu)=\log(\mu) \tag{14} $$
取值约束(系统校验):
- binomial:\(y\in\{0,1\}\)
- poisson:\(y\ge 0\)
- gamma:\(y>0\)
若不满足约束,请改用 gaussian 或先对数据做变换。
5. 任务输出与评价指标
5.1 回归指标
MAE $$ \mathrm{MAE}=\frac{1}{n}\sum_{i=1}^n|y_i-\hat y_i| \tag{15} $$
MSE / RMSE $$ \mathrm{MSE}=\frac{1}{n}\sum_{i=1}^n(y_i-\hat y_i)^2 \tag{16} $$
$$ \mathrm{RMSE}=\sqrt{\mathrm{MSE}} \tag{17} $$
决定系数 $$ R^2=1-\frac{\sum_{i=1}^n (y_i-\hat y_i)^2}{\sum_{i=1}^n (y_i-\bar y)^2} \tag{18} $$
5.2 二分类指标
准确率 $$ \mathrm{Acc}=\frac{TP+TN}{TP+TN+FP+FN} \tag{19} $$
精确率 / 召回率 / F1 $$ \mathrm{Precision}=\frac{TP}{TP+FP},\quad \mathrm{Recall}=\frac{TP}{TP+FN} \tag{20} $$
$$ F1=\frac{2\cdot\mathrm{Precision}\cdot\mathrm{Recall}}{\mathrm{Precision}+\mathrm{Recall}} \tag{21} $$
二分类阈值(系统默认 0.5) $$ \hat y=\mathbf{1}(\hat p\ge 0.5) \tag{22} $$
6. 数据划分与处理(与系统一致)
6.1 训练/测试划分
若测试集比例为 \(t\),则
$$ n_{\text{test}}=\lceil n\cdot t\rceil,\quad n_{\text{train}}=n-n_{\text{test}} \tag{23} $$
6.2 One-Hot 与缺失处理
- 非数值变量在训练集拟合后进行 one-hot。
- 缺失处理支持
drop_rows(删除)与mean_impute(均值填充)。
6.3 权重与 Offset
若配置样本权重 \(w_i\):
$$ \ell(\beta)=\sum_{i=1}^n w_i\,\ell_i(\beta) \tag{24} $$
若配置 offset:
$$ \eta_i=\beta_0+\sum_j\beta_j x_{ij}+\text{offset}_i \tag{25} $$
7. 结果输出(Excel/图表)
Excel Sheets(固定输出):
- RawData_Preview
- Processed_Data
- DesignMatrix
- Parameters
- FitSummary
- Diagnostics
- Pred_all / Pred_train / Pred_test
- Charts_Index
图表输出:
- 回归:
y_pred_vs_true、true_vs_pred_line、residual_hist、qq_resid - 分类:以上回归图 +
roc_curve
8. 与代码实现的对应关系
本算法在程序中由 具体的算法2/GLM-广义线性模型/core/calculator.py 实现。程序优先使用 statsmodels.api.GLM,若依赖不可用则回退到内部 IRLS 实现,因此文档和论文都应以真实运行路径、真实导出表和真实图表为依据。
8.1 程序实际导出的工作表
RawData_Preview:原始数据预览;Processed_Data:清洗、编码后的可建模数据;DesignMatrix:设计矩阵;Parameters:family、link、权重、offset、训练比例等参数;FitSummary:拟合统计量与评价指标;Diagnostics:残差或分类诊断结果;Pred_all、Pred_train、Pred_test:不同数据切分上的预测结果;Charts_Index:图表索引与相对路径。
8.2 程序实际生成的图表
- 回归场景:
y_pred_vs_true、true_vs_pred_line、residual_hist、qq_resid; - 二分类场景:在上述基础上增加
roc_curve; - 因此论文若是分类任务,应至少报告 ROC/AUC,而不能只报回归误差图。
8.3 程序实现中需要写明的细节
- family/link 组合在程序中有校验,不是任意配对;
binomial任务默认按 0.5 阈值生成类别预测;- 程序支持
weights与offset,若实际运行启用了这些项,应在方法部分明确写出; - 若环境缺少
statsmodels,程序会回退到内部 IRLS 实现,附录中可注明实现路径。
8.4 论文中的直接映射
- 数据处理与模型设定:对应
Processed_Data、DesignMatrix、Parameters; - 模型拟合与指标:对应
FitSummary; - 残差/分类诊断:对应
Diagnostics与Charts_Index; - 样本内外结果对比:对应
Pred_train、Pred_test。
9. UI 参数一一对应表
| UI 参数 | 含义 | 说明 |
|---|---|---|
| 任务类型 | 回归 / 二分类 | 回归可选 gaussian/poisson/gamma;二分类固定 binomial |
| family | 分布族 | gaussian / binomial / poisson / gamma |
| link | 连接函数 | identity / logit / log |
| 包含截距项 | 是否包含截距 | 默认勾选 |
| max_iter | 最大迭代次数 | IRLS 迭代上限 |
| tol | 收敛阈值 | 默认 1e-6 |
| alpha | 显著性水平 | 例如 0.05 表示 95% 区间 |
| one_hot | 类别型变量编码 | 勾选后自动 one-hot |
| missing | 缺失处理 | drop_rows / mean_impute |
| weights | 样本权重 | 可选列名 |
| offset | offset | 可选列名 |
| train_ratio | 训练集比例 | 默认 0.8 |
| shuffle | 是否打乱 | 默认勾选 |
| random_state | 随机种子 | 保证可复现 |
| 输出路径 | Excel 输出 | 支持自定义路径 |
10. 论文写作模板
10.1 回归任务模板段落
本文采用广义线性模型(GLM)对因变量进行回归建模,选择 \(\text{gaussian} + \text{identity}\) 作为分布族与连接函数。模型通过 IRLS 迭代求解参数(式(7)–(9)),并在测试集上评估 MAE、MSE、RMSE 与 \(R^2\)(式(15)–(18))。为检验误差结构与正态性,绘制预测–真实散点图、真实值-预测值折线图、残差直方图与残差 Q-Q 图。结果表明模型拟合具有良好一致性与解释力。
10.2 二分类任务模板段落
本文采用 GLM 二分类模型(binomial-logit)进行判别建模。模型输出类别概率,并以阈值 0.5 生成类别预测(式(22))。在测试集上采用 Accuracy、Precision、Recall 与 F1 等指标进行评价(式(19)–(21)),并绘制 ROC 曲线以衡量整体判别能力。结果显示模型具有稳定的分类性能。
10.3 图表题注模板(可直接使用)
回归图表
- 预测–真实散点图:展示预测值与真实值的对应关系。
- 真实值-预测值折线对比图:按样本序号对比趋势。
- 残差直方图:刻画残差分布形态。
- 残差 Q-Q 图:检验残差正态性。
分类图表
- ROC 曲线:展示不同阈值下 TPR/FPR 的权衡。
- 预测–真实散点图、折线图与残差图:用于检验误差结构与拟合稳定性。
10.4 表格标题模板
- 表 1 GLM 模型参数设置表(family、link、alpha、max_iter 等)
- 表 2 GLM 模型拟合统计表(loglik、AIC、BIC、Deviance 等)
- 表 3 GLM 预测结果表(y_true、y_pred、残差/分类标签)
10.5 表格示例(含显著性标注)
表 4 GLM 参数估计与显著性
| 变量 | 估计值 | 标准误 | z 值 | p 值 | 显著性 |
|---|---|---|---|---|---|
| x1 | 0.523 | 0.102 | 5.12 | 0.000 | *** |
| x2 | -0.214 | 0.085 | -2.52 | 0.012 | ** |
| x3 | 0.071 | 0.066 | 1.08 | 0.279 |
注:*** p<0.01,** p<0.05,* p<0.1。
10.6 示例图注编号格式
- 图 1 GLM 预测–真实散点图
- 图 2 GLM 真实值-预测值折线对比图
- 图 3 GLM 残差直方图
- 图 4 GLM 残差 Q-Q 图
- 图 5 GLM ROC 曲线(分类)
10.7 英文模板段落与图表题注(可选)
英文方法段:
“We employed a Generalized Linear Model (GLM) to model the response variable. The linear predictor \(\eta_i=\beta_0+\sum_j\beta_j x_{ij}+\text{offset}_i\) was linked to the mean through a link function (Eqs. (3)–(4)). Parameters were estimated via iteratively reweighted least squares (IRLS; Eqs. (7)–(9)). For regression we used the Gaussian family with identity link; for classification we used the binomial family with logit link (Eqs. (11)–(14)).”
英文结果段:
“Model performance was evaluated on a held-out test set. For regression, MAE, MSE/RMSE and \(R^2\) were reported (Eqs. (15)–(18)), together with prediction–truth scatter, line-comparison, residual histogram and Q-Q plots. For classification, Accuracy, Precision, Recall and F1 were computed (Eqs. (19)–(21)), and ROC curves were provided to assess discriminative ability.”
英文图题模板:
- Fig. 1. Predicted vs. observed scatter plot for GLM regression.
- Fig. 2. True–predicted line comparison across samples.
- Fig. 3. Residual histogram and Q-Q plot for GLM residual diagnostics.
- Fig. 4. ROC curve for GLM binomial classification.
英文表格标题模板:
- Table 1. GLM parameter estimates and confidence intervals.
- Table 2. Goodness-of-fit statistics (loglik, AIC, BIC, Deviance).
- Table 3. Prediction summary on train/test sets.
11. 注意事项
- 二分类 y 必须为 0/1;poisson 需 \(y\ge 0\),gamma 需 \(y>0\)。
- one-hot 与缺失处理应在训练集拟合后应用于测试集,避免数据泄漏。
- 若出现完全分离或多重共线性,建议进行特征筛选或正则化处理。
- 对于有明显时间顺序的数据,可额外绘制残差时序图进行结构性检查。
12. 单篇终审补充
12.1 图题与表题对齐建议
- 本文档应优先对应真实算法目录
具体的算法2/GLM-广义线性模型。 - 代表性结果表可绑定
具体的算法2/GLM-广义线性模型/results/GLM(binomial,logit)分析结果_20260227_172236/GLM(binomial,logit)分析结果_20260227_172236.xlsx,其工作表为:RawData_Preview、Processed_Data、DesignMatrix、Parameters、FitSummary、Diagnostics、Pred_all、Pred_train、Pred_test、Charts_Index。 - 图题可优先绑定较新的同类实体图:
y_pred_vs_true_20260329_165330.png、true_vs_pred_line_20260329_165330.png、residual_hist_20260329_165330.png、qq_resid_20260329_165330.png;若写分类案例,还可说明旧目录中另有roc_curve_20260227_172236.png。 - 因此正文中应把“回归/分类图例”与具体结果目录或具体时间戳图区分开写,避免将 binomial 旧目录和 gaussian 新图混为单一批次。
12.2 终审说明
- GLM 当前的导出结构也不是完全单目录闭环:时间戳结果子目录中保留了早期完整案例,而
results根目录则平铺保存了后续多轮图像和复现脚本。 - 复现脚本可对应
repro_glm_20260329_165331.py,其SRC_FILE实际写为glm_window1_input.csv,属于“脚本同目录 CSV 快照复现”口径。 - 因此论文附录若写复现口径,应明确区分“旧时间戳目录中的完整 binomial 样例结果”和“
results根目录下新一轮复现脚本与图像”,不要将两者表述为同一单次导出。
12.3 全量强化补充
- 当前最完整、最适合作为主结果证据的工作簿仍是
具体的算法2/GLM-广义线性模型/results/GLM(binomial,logit)分析结果_20260227_172236/GLM(binomial,logit)分析结果_20260227_172236.xlsx。这一本当前实际工作表为RawData_Preview、Processed_Data、DesignMatrix、Parameters、FitSummary、Diagnostics、Pred_all、Pred_train、Pred_test、Charts_Index。 - 与这一本工作簿同目录的实体图文件也最完整,分别是
具体的算法2/GLM-广义线性模型/results/GLM(binomial,logit)分析结果_20260227_172236/y_pred_vs_true_20260227_172236.png、true_vs_pred_line_20260227_172236.png、residual_hist_20260227_172236.png、qq_resid_20260227_172236.png、roc_curve_20260227_172236.png。因此若正文讨论二分类案例,roc_curve_20260227_172236.png应与这一本 binomial 工作簿一起引用。 - 当前较新的回归图和复现脚本并不在同一个时间戳子目录,而是平铺在
results根目录下,包括具体的算法2/GLM-广义线性模型/results/y_pred_vs_true_20260329_165330.png、true_vs_pred_line_20260329_165330.png、residual_hist_20260329_165330.png、qq_resid_20260329_165330.png,以及具体的算法2/GLM-广义线性模型/results/repro_glm_20260329_165331.py和具体的算法2/GLM-广义线性模型/results/glm_window1_input.csv。 - 因此当前 GLM 的真实证据结构是“两段式”:一段是旧 binomial 完整结果目录,另一段是后续新回归图与脚本的根目录平铺结果。写文档时不能把这些文件描述成“同一次分析导出的统一结果包”,否则会误导用户以为这些图和工作簿天然同批次对应。
- 复现脚本也分两种口径。旧目录里的
具体的算法2/GLM-广义线性模型/results/GLM(binomial,logit)分析结果_20260227_172236/repro_glm_20260227_172236.py使用SRC_FILE = 'uploads/glm_sample_classification.csv';而新脚本具体的算法2/GLM-广义线性模型/results/repro_glm_20260329_165331.py使用SRC_FILE = 'glm_window1_input.csv'。前者是“回指算法 uploads 样例”的老口径,后者是“脚本同目录 CSV 快照复现”的新口径。 - 这意味着 GLM 这一篇在论文或交付说明中必须明确区分“主结果工作簿证据”和“新近复现脚本证据”。如果只想给用户一条最稳妥的复现实验路径,应优先引用根目录平铺的新脚本加同目录 CSV;如果要给用户看最完整的导出工作表,则应引用旧 binomial 子目录下的主工作簿。
13. 软件实现核查补充(2026-07)
- 当前实现应按“两段式证据链”写:一段是
具体的算法2/GLM-广义线性模型/results/GLM(binomial,logit)分析结果_20260227_172236的完整 binomial 工作簿,一段是results根目录中的新回归图与脚本。 - 正文如果讨论分类,应优先引用旧 binomial 目录里的
Parameters、FitSummary、Diagnostics、Pred_all、Pred_train、Pred_test、Charts_Index;如果讨论回归,应优先引用根目录平铺的y_pred_vs_true_20260329_165330.png、true_vs_pred_line_20260329_165330.png、residual_hist_20260329_165330.png、qq_resid_20260329_165330.png。 - 复现脚本也分两种口径:旧目录的
repro_glm_20260227_172236.py走uploads/glm_sample_classification.csv,新脚本repro_glm_20260329_165331.py走glm_window1_input.csv。 - 文档里不要把这两条路线写成同一次导出,也不要把不同时间戳目录中的图和表混成一组。