正在加载中...

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

GLM-广义线性模型

No.047 · 在线教程

广义线性模型(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_truetrue_vs_pred_lineresidual_histqq_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_allPred_trainPred_test:不同数据切分上的预测结果;
  • Charts_Index:图表索引与相对路径。

8.2 程序实际生成的图表

  • 回归场景:y_pred_vs_truetrue_vs_pred_lineresidual_histqq_resid
  • 二分类场景:在上述基础上增加 roc_curve
  • 因此论文若是分类任务,应至少报告 ROC/AUC,而不能只报回归误差图。

8.3 程序实现中需要写明的细节

  • family/link 组合在程序中有校验,不是任意配对;
  • binomial 任务默认按 0.5 阈值生成类别预测;
  • 程序支持 weightsoffset,若实际运行启用了这些项,应在方法部分明确写出;
  • 若环境缺少 statsmodels,程序会回退到内部 IRLS 实现,附录中可注明实现路径。

8.4 论文中的直接映射

  • 数据处理与模型设定:对应 Processed_DataDesignMatrixParameters
  • 模型拟合与指标:对应 FitSummary
  • 残差/分类诊断:对应 DiagnosticsCharts_Index
  • 样本内外结果对比:对应 Pred_trainPred_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 图表题注模板(可直接使用)

回归图表

  1. 预测–真实散点图:展示预测值与真实值的对应关系。
  2. 真实值-预测值折线对比图:按样本序号对比趋势。
  3. 残差直方图:刻画残差分布形态。
  4. 残差 Q-Q 图:检验残差正态性。

分类图表

  1. ROC 曲线:展示不同阈值下 TPR/FPR 的权衡。
  2. 预测–真实散点图、折线图与残差图:用于检验误差结构与拟合稳定性。

10.4 表格标题模板

  1. 表 1 GLM 模型参数设置表(family、link、alpha、max_iter 等)
  2. 表 2 GLM 模型拟合统计表(loglik、AIC、BIC、Deviance 等)
  3. 表 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. 注意事项

  1. 二分类 y 必须为 0/1;poisson 需 \(y\ge 0\),gamma 需 \(y>0\)。
  2. one-hot 与缺失处理应在训练集拟合后应用于测试集,避免数据泄漏。
  3. 若出现完全分离或多重共线性,建议进行特征筛选或正则化处理。
  4. 对于有明显时间顺序的数据,可额外绘制残差时序图进行结构性检查。

12. 单篇终审补充

12.1 图题与表题对齐建议

  • 本文档应优先对应真实算法目录 具体的算法2/GLM-广义线性模型
  • 代表性结果表可绑定 具体的算法2/GLM-广义线性模型/results/GLM(binomial,logit)分析结果_20260227_172236/GLM(binomial,logit)分析结果_20260227_172236.xlsx,其工作表为:RawData_PreviewProcessed_DataDesignMatrixParametersFitSummaryDiagnosticsPred_allPred_trainPred_testCharts_Index
  • 图题可优先绑定较新的同类实体图:y_pred_vs_true_20260329_165330.pngtrue_vs_pred_line_20260329_165330.pngresidual_hist_20260329_165330.pngqq_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_PreviewProcessed_DataDesignMatrixParametersFitSummaryDiagnosticsPred_allPred_trainPred_testCharts_Index
  • 与这一本工作簿同目录的实体图文件也最完整,分别是 具体的算法2/GLM-广义线性模型/results/GLM(binomial,logit)分析结果_20260227_172236/y_pred_vs_true_20260227_172236.pngtrue_vs_pred_line_20260227_172236.pngresidual_hist_20260227_172236.pngqq_resid_20260227_172236.pngroc_curve_20260227_172236.png。因此若正文讨论二分类案例,roc_curve_20260227_172236.png 应与这一本 binomial 工作簿一起引用。
  • 当前较新的回归图和复现脚本并不在同一个时间戳子目录,而是平铺在 results 根目录下,包括 具体的算法2/GLM-广义线性模型/results/y_pred_vs_true_20260329_165330.pngtrue_vs_pred_line_20260329_165330.pngresidual_hist_20260329_165330.pngqq_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 目录里的 ParametersFitSummaryDiagnosticsPred_allPred_trainPred_testCharts_Index;如果讨论回归,应优先引用根目录平铺的 y_pred_vs_true_20260329_165330.pngtrue_vs_pred_line_20260329_165330.pngresidual_hist_20260329_165330.pngqq_resid_20260329_165330.png
  • 复现脚本也分两种口径:旧目录的 repro_glm_20260227_172236.pyuploads/glm_sample_classification.csv,新脚本 repro_glm_20260329_165331.pyglm_window1_input.csv
  • 文档里不要把这两条路线写成同一次导出,也不要把不同时间戳目录中的图和表混成一组。