interpretable-ml-book 版本演进全解:从 v0.1 到 v3.0 的可解释机器学习指南是如何炼成的

原创2026-10-12 22:01:281,985 阅读
文章标签:AI 可解释性教程文档

interpretable-ml-book 版本演进全解:从 v0.1 到 v3.0 的可解释机器学习指南是如何炼成的

本篇文章以开源仓库 interpretable-ml-book(《Interpretable Machine Learning: A Guide for Making Black Box Models Explainable》一书的官方源码库)中的 CHANGELOG.md 为绝对主体,系统梳理这本书从 2017 年 v0.1 首版到 2025 年 v3.0 第七次重大发布之间近八年的版本演进脉络。你将看到:章节命名如何统一为业界通用术语、章节顺序如何从"全局在前"调整为"局部在前"、示例数据如何从癌症数据集切换为 Palmer 企鹅数据集,以及伴随每一次发布被修正的数学公式与逻辑错误——所有这些条目都可在 manuscript 目录下的 .qmd 章节文件中找到对应的源码证据。

一、版本总览:七个里程碑

CHANGELOG 记录了这本书的完整版本历史。版本号的跳变并不与发布次数一一对应(例如 v0.1 之后直接进入 v0.2、v0.3……直至 v1.0,随后是 v1.1、v2.0 与 v3.0),其含义是:小版本号(0.x)代表早期草稿阶段的快速迭代,1.x 代表经过完整校对后的正式发布,2.x 与 3.x 则是结构性的重大改版。各版本概要如下:

版本 日期 定位 关键变化
v0.1 2017-12-03 首版 《可解释机器学习》一书首次发布
v0.2 2018-02-13 草稿迭代 新增 Shapley 值、短故事章节、RuleFit 重写、协作机制
v0.3 2018-04-24 草稿迭代 重构特征重要性章、新增第三个短故事、引入 iml 包绘图
v0.4 2018-05-23 草稿迭代 新增全局代理模型、特征交互、未来展望等章节
v0.5 2018-08-14 草稿迭代 新增影响实例、决策规则、对抗样本等 5 个章节
v0.6 2018-11-02 草稿迭代 新增 ALE 图、扩展线性模型章节
v0.7 2018-11-21 草稿迭代 定义章更名 Terminology、LASSO 示例、参考文献列表
v1.0 2019-02-21 正式版 全面校对与润色
v1.1 2019-03-23 修正版 Cook 距离公式索引修正、配色改为色盲友好
v2.0 2022-03-04 重大改版 新增作者前言、神经网络解释方向、SHAP、Anchors 等章节
v3.0 2025-03-11 最新版 章节更名统一术语、局部方法前置、企鹅数据集替换癌症数据

从时间线可以看出,这本书经历了"快速试错(0.x 阶段约一年)→ 稳定成书(v1.0)→ 间隔三年的两次结构性大改(v2.0、v3.0)"三个阶段。每一次版本发布都不是简单的增量补充,而是对全书结构、术语体系、示例数据与数学严谨性的系统性审视。

二、v3.0(2025-03-11):章节更名、顺序重构与企鹅数据

v3.0 是 CHANGELOG 中记录的最新版本,也是改动最深刻的一次发布。本节逐条解析其核心变更,并在仓库中定位对应的源码证据。

2.1 章节更名:统一为业界通用术语

v3.0 首先做了一件看似简单但影响深远的事——把章节名称统一为可解释机器学习领域最广为接受的术语。原文档记录的四项更名如下:

原章节名 新章节名 仓库中的章节文件
Local Surrogate (LIME) LIME manuscript/lime.qmd
Global Surrogate Surrogate Models manuscript/global.qmd
SHAP (SHapley Additive exPlanations) SHAP manuscript/shap.qmd
Pixel Attribution (Saliency Maps) Saliency Maps manuscript/pixel-attribution.qmd

这一改动的动机很明确:章节标题应该与读者在论文、博客和工具文档中遇到的术语保持一致。在可解释性领域,"LIME"、"SHAP" 早已成为约定俗成的专有名词,而 "Saliency Maps"(显著性图)与 "Surrogate Models"(代理模型)也比作者最初发明的描述性名称更具辨识度。例如 manuscript/pixel-attribution.qmd 现在的第一行标题就是 # Saliency Maps {#pixel-attribution},而 manuscript/global.qmd 的第一行标题是 # Surrogate Models {#global}——注意其内部锚点 {#global} 保留了旧的文件结构命名,说明文件本身并未重命名,只是显示标题改变了。

2.2 顺序重构:局部方法前置到全局方法之前

v3.0 将书中方法的展示顺序从"全局在前、局部在后"调整为"局部在前、全局在后"。从 manuscript/_quarto.yml 的章节配置中可以清晰地看到这一结构:

  • Interpretable Models(可解释模型):线性回归、逻辑回归、扩展线性模型、决策树、决策规则、RuleFit
  • Local Model-Agnostic Methods(局部模型无关方法):Ceteris Paribus、ICE、LIME、反事实解释、Anchors、Shapley 值、SHAP
  • Global Model-Agnostic Methods(全局模型无关方法):PDP、ALE、特征交互、功能分解、置换特征重要性、LOFO、代理模型、原型
  • Neural Network Interpretation(神经网络解释):CNN 特征、显著性图、概念检测、对抗样本、影响实例

这种排布符合读者的认知习惯:先理解"单个预测如何被解释"(局部),再上升到"模型整体行为如何被解释"(全局),最后进入深度学习特有的解释方法。

2.3 示例统一:模型只训练一次、性能统一测量

v3.0 对全书示例做了系统性统一:每个章节的示例模型只训练一次,模型的性能指标统一在 Data 章节测量和报告,并统一研究特征间的相关性与互信息。

这一做法的实证在 manuscript/data.qmd 中体现得最为充分。该章节定义了两个贯穿全书的示例数据集:用于回归的共享单车租赁数据(bike)和用于分类的Palmer 企鹅数据(penguins)。它对回归任务统一报告 RMSE(均方根误差)与 MAE(平均绝对误差),对分类任务统一报告 Log Loss 与 Accuracy;同时定义了两个可复用的自定义函数:

  • custom_correlation_table():剔除非数值列后计算 Pearson 相关系数矩阵并输出 Markdown 表格;
  • mi_pair_plot():基于 infotheo 包计算归一化互信息(NMI),并用 Freedman-Diaconis 规则决定连续特征离散化的分箱数。

其中 NMI 的定义为 NMI(Xj,Xk)=2⋅MI(Xj,Xk)H(Xj)+H(Xk)NMI(X_j, X_k) = \frac{2 \cdot MI(X_j, X_k)}{H(X_j) + H(X_k)},取值范围理论上在 [0, 1],但文档特别提示:NMI 对类别/分箱数较多的特征存在向上偏差,因此不能单独依赖 NMI,还要配合原始散点图和 Pearson 相关分析。企鹅数据部分还专门用图示解释了 Simpson 悖论:将所有企鹅合并后,体重与嘴深度的正相关会翻转成负相关(因为 Gentoo 企鹅更重且嘴更深),而互信息可以克服这一线性相关失效的问题。

顺便一提:data.qmd 中用于计算 NMI 的 freedman_diaconis 函数实现了经典的 Freedman-Diaconis 分箱数公式 nbinsj=⌈max⁡(xj)−min⁡(xj)2⋅IQR(xj)/n1/3⌉\text{nbins}_j = \lceil \frac{\max(\mathbf{x}_j) - \min(\mathbf{x}_j)}{2 \cdot \text{IQR}(\mathbf{x}_j) / n^{1/3}} \rceil,这是 data.qmd 中少数几个从零实现的统计工具函数之一。

2.4 压缩铺垫文本:从"第一个词"直奔"第一个方法"

v3.0 大幅缩短了正文中从开篇到第一个方法之间的铺垫内容,具体动作包括:

  • 把"可解释性的范畴(Scope of interpretability)"并入 Overview 章节;
  • 删除作者前言,将相关内容并入"关于本书"与引言;
  • 将 "Terminology"(术语)与 "What is Machine Learning"(什么是机器学习)两章移到附录;
  • 将书中的短故事(short stories)移到书末。

对应到 manuscript/_quarto.yml 的配置:appendices 部分现在包含了 what-is-machine-learning.qmd 与 math-terms.qmd(数学术语表),而 storytime.qmd 则位于书末的 "Beyond the Methods" 部分。这种安排让主流程读者能以最短路径进入方法论核心,同时保留了对背景知识的完整支持。

2.5 新增章节:Methods Overview、Goals、Ceteris Paribus、LOFO

v3.0 新增了四个章节,在仓库中均有对应文件:

  • Methods Overview(方法概览):manuscript/overview.qmd,标题为 # Methods Overview {#overview},用于整合原先分散在各地的引导性文本(例如各类方法的引言);
  • Goals of Interpretability(可解释性的目标):manuscript/goals.qmd,开篇即点明"Interpretability is not an end in itself, but a means to an end"(可解释性本身不是目的,而是手段);
  • Ceteris Paribus(其余条件不变图):manuscript/ceteris-paribus.qmd,标题为 # Ceteris Paribus Plots {#ceteris-paribus},属于局部模型无关方法;
  • LOFO(Leave One Feature Out):manuscript/lofo.qmd,标题为 # Leave One Feature Out (LOFO) Importance {#lofo},属于全局模型无关方法。

2.6 文献引用体系化与公式/图表一致性

v3.0 更新了大量参考文献,并将脚注式引用迁移为规范的 BibTeX 引用。仓库中可看到两个文献库文件:manuscript/references.bib 与 manuscript/grateful-refs.bib,两者在 _quarto.yml 中通过 bibliography: [references.bib,grateful-refs.bib] 一起加载,并使用 cite-method: citeproc 渲染。数学公式在全书范围内做了统一,图表标题(caption)被改进并在正文中交叉引用——这正是 data.qmd 中大量使用 @tbl-performance-bike、@fig-bike-mi 这类交叉引用标签的原因。

2.7 分类示例数据替换:从癌症数据到 Palmer 企鹅

这是 v3.0 最有故事性的一次数据决策。原文档明确记录:旧的癌症数据集中结果变量的编码存在错误,导致所有解释的语义恰好反了。作者没有简单地反转标签,而是决定直接更换数据集,理由有三:癌症数据已不再合适、企鹅数据更容易理解、且敏感度更低。

由此,manuscript/data.qmd 的企鹅部分正式确立:使用 data/penguins.csv(通过 palmerpenguins R 包加载,该依赖可见于 DESCRIPTION),任务从"癌症/健康分类"变为根据体型测量数据分类企鹅的性别(male/female),与数据原始论文 @gorman2014ecological 的研究目标一致。分类性能统一报告 Log Loss 与 Accuracy。仓库中的企鹅示例数据文件包括:

2.8 删除与替换:'Other interpretable models' 与贡献章节

v3.0 删除了 "Other interpretable models"(其他可解释模型)章节——该章节只包含朴素贝叶斯和 KNN,却引发了比它解答的更多问题。同时,"贡献(Contribute)"章节被替换为指向仓库的链接。这一决定与 README.md 中的 Contributing 一节相呼应:鼓励读者 fork 仓库、新建分支、修复错误并提交 pull request,或以 issue 形式提出内容建议。

2.9 数学勘误示例:TkT_k 与实例无关

v3.0 还修复了 "Learned Features -> Network Dissection -> Step 2" 中的一处量化级别错误:激活阈值的分位数级别不再依赖具体实例 xx,即使用 TkT_k 而不是 Tk(x)T_k(x)。这一修正已在 manuscript/cnn-features.qmd 中得到落实——第 189 行写作"Determine the 0.995-quantile level TkT_k of activations αk\alpha_k",第 192 行将二值化掩码定义为 Mk(x)=Sk(x)≥TkM_k(\mathbf{x})=S_k(\mathbf{x})\geq T_k,阈值 TkT_k 是对整个数据集层面确定的固定值,而非逐实例变化。

三、v2.0(2022-03-04):神经网络解释与 SHAP、Anchors 的引入

v2.0 是间隔三年的结构性大改版,核心方向是引入深度学习解释章节,并按"局部、全局、深度学习"三层重新组织方法体系(此前是"模型无关、基于示例、深度学习")。

3.1 新增章节

v2.0 新增了以下内容,均在仓库中留有对应文件:

仓库中的 manuscript/images 目录保存着这些章节的配套插图,例如 shap-simplified-features.jpg、anchors-visualization.jpg、feature-visualization-units.jpg 等,均与相应章节主题对应。

3.2 更名与勘误

v2.0 将"Feature Importance"章节更名为 "Permutation Feature Importance"(置换特征重要性)——这一更名延续到 v3.0 至今,manuscript/feature-importance.qmd 的标题即为 # Permutation Feature Importance {#feature-importance}。同时新增了**功能分解(functional decomposition)**章节。

v2.0 还附带一份数学勘误清单,其中最重要的是:

  • GLM/GAM 章节:逻辑回归的链接函数是 logit 而非 logistic 函数。这一点在 manuscript/logistic.qmd 中得到印证——该章用 family = binomial(link="logit") 拟合逻辑回归模型;
  • 线性模型章节:调整后 R2R^2(adjusted R-squared)公式被修正了两次;
  • 决策规则章节:修复了 OneR 章节中 Healthy 与 Cancer 标签的混淆;
  • RuleFit 章节:总重要性公式中线性项的重要性索引从 ll 修正为 jj;
  • 影响实例章节:从模型参数更新中移除了 (1−ϵ)(1-\epsilon)。

四、v1.x 与 0.x:早期版本的积累与修正

4.1 v1.1(2019-03-23):可访问性与公式修正

v1.1 虽然改动量小,但体现了本书对严谨性与可访问性的坚持:

  • 修正 Cook 距离求和索引(i→ji \to j);
  • 修正箱线图公式(1.5 而非 1.58);
  • 配色改为色盲友好的 viridis 色系,并确保图形在黑白打印下同样可读。viridis 出现在 DESCRIPTION 的依赖列表中,data.qmd 中也能看到 scale_color_viridis_d() 的实际使用;
  • 扩展了反事实章节,新增 MOC(多目标反事实)方法。

4.2 v1.0(2019-02-21):正式版

v1.0 完成了全书的大规模校对与润色,标志着这本书从草稿进入正式发布阶段。

4.3 v0.7(2018-11-21):术语与数学记号

  • "Definitions" 章节更名为 Terminology(术语),并补充了数学记号说明;
  • 新增 LASSO 示例;
  • 重构线性模型章节并补充优缺点;
  • "Criteria of Interpretability Methods" 更名为 "Taxonomy of Interpretability Methods"(可解释性方法分类学);
  • 补充逻辑回归的优缺点;
  • 书末新增参考文献列表;
  • 为短故事补充配图;
  • 指出 Shapley 值的一个缺陷:要求特征相互独立;
  • 决策树章节新增树的分解与特征重要性;
  • 改进线性模型章节中个体预测的解释;
  • 对抗样本章节新增 "What's Wrong With my Dog" 示例;
  • 新增数据文件与 R 预处理脚本的链接——这正是 scripts/get-bike-sharing-dataset.R 与 scripts/get-SpamTube-dataset.R 等脚本存在的来源。例如前者将 UCI Bike Sharing 原始数据做因子化、温度反归一化、构造 cnt_2d_bfr(两天前的租车量)等处理,与 data.qmd 中描述的字段一一对应。

4.4 v0.6(2018-11-02):ALE 图与扩展线性模型

  • 新增**累积局部效应图(ALE,Accumulated Local Effects)**章节:manuscript/ale.qmd;
  • 为 PDP 章节补充优缺点与分类特征示例;
  • 新增扩展线性模型章节:manuscript/extend-lm.qmd;
  • 修复 Friedman H 统计量中缺失的平方;
  • 在特征重要性章节补充训练数据 vs 测试数据的讨论。

4.5 v0.5(2018-08-14):五个新章节与 LIME 图像

v0.5 一口气新增了五个章节:

此外还新增了 LIME 图像分类小节(由 Verena Haunschmid 贡献)与"何时不需要可解释性"小节,并将 "Human-style Explanations" 更名为 "Human-friendly Explanations"。

4.6 v0.4(2018-05-23):全局代理模型与特征交互

  • 新增全局代理模型章节(即后来的 Surrogate Models);
  • 新增特征交互章节:manuscript/interaction.qmd;
  • 新增致谢章节:manuscript/acknowledgements.qmd;
  • 新增致谢与未来展望章节:manuscript/future.qmd;
  • 改进 PDP 章节示例、修复 LIME 文本章节中权重对应的措辞错误;
  • 新增 "Criteria for Interpretability Methods"(后来更名 Taxonomy)。

4.7 v0.3(2018-04-24):iml 包的引入

  • 重构特征重要性章节;
  • 新增第三个短故事;
  • 移除 xkcd 漫画;
  • 合并引言与关于本书章节;
  • 为 PDP 与 ICE 章节补充优缺点;
  • 开始在 ICE 与 PDP 章节使用 iml R 包绘图——iml 依赖自此进入 DESCRIPTION 并沿用至今;
  • 为 Leanpub 重构书籍文件结构、新增封面与 CSS 样式。

4.8 v0.2(2018-02-13):Shapley 值、短故事与协作机制

  • 新增 Shapley 值解释章节:manuscript/shapley.qmd;
  • 新增短故事章节(即后来的 manuscript/storytime.qmd);
  • 前言中新增捐赠链接;
  • 用示例与理论重写 RuleFit;
  • 扩展可解释性章节;
  • 引入 Travis 持续集成:拉取请求提交时自动检查书籍能否成功渲染——这是本书质量保障机制的开端(如今仓库通过 GitHub Actions 的 Book.yaml 工作流执行类似任务,见 README.md 中的构建徽章)。

4.9 v0.1(2017-12-03):一切的起点

《可解释机器学习》一书首次发布。此后所有版本都建立在这份初版的基础上。

五、从 CHANGELOG 反观仓库:版本演进的实证地图

CHANGELOG 的价值不仅在于记录历史,更在于它是一张定位当前仓库结构的索引图。将 CHANGELOG 条目与仓库实际文件对照,可以总结出三条规律:

  1. 章节文件稳定,标题可演变:从 v0.1 到 v3.0,绝大多数章节的文件名(如 lime.qmd、shap.qmd)从未改变,改变的是显示标题与内容组织。文件命名一旦确定就尽量保持,以维持内部交叉引用与链接的稳定。

  2. 勘误是质量保证的第一道防线:CHANGELOG 中几乎每个版本都附有数学勘误(索引错误、公式缺失、标签颠倒、链接函数误用等)。这些条目与当前章节源码一一对应,例如逻辑回归的 logit 链接、CNN 激活阈值 TkT_k、Cook 距离索引、调整 R2R^2 公式、RuleFit 的 jj 索引等。对读者而言,阅读 CHANGELOG 等于拿到一份"全书勘误自查表",可以在阅读对应章节时格外留意这些位置。

  3. 示例数据的选择影响全书:v2.0 引入、v3.0 定型的"共享单车(回归)+ Palmer 企鹅(分类)"双数据集方案,在 manuscript/data.qmd 中一次性定义,其余章节共享同一套预训练模型与性能报告。这种"中央数据章节 + 各章引用"的架构,正是 v3.0 "模型只训练一次、性能统一测量"原则的实现方式,也让读者在阅读任何一章时都能获得一致的上下文。

六、如何基于当前仓库复现与阅读

仓库是只读的,以下操作均用于本地查看与复现:

  1. 克隆与依赖:将仓库克隆到本地后,R 环境的依赖清单位于 DESCRIPTION(含 palmerpenguins、iml、xgboost、randomForest、infotheo 等)与 renv.lock(锁定版本的 renv 锁文件),可按 renv 标准流程恢复环境。

  2. 数据获取:共享单车与 YouTube Spam 数据可通过 scripts/get-bike-sharing-dataset.R 与 scripts/get-SpamTube-dataset.R 下载并预处理;企鹅数据由 palmerpenguins 包提供,处理后的副本见 data/penguins.csv。

  3. 书籍渲染:全书使用 Quarto 组织,主配置为 manuscript/_quarto.yml,支持 html、pdf、epub 三种格式(另有 _quarto-pdf.yml、_quarto-ebook.yml、_quarto-kindle.yml、_quarto-print.yml、_quarto-editing.yml 等按用途拆分的配置),并配有 manuscript/Makefile 简化构建流程。

  4. 引用本书:README.md 提供了规范的引用方式(文本引用与 BibTeX 条目),第三版 ISBN 为 978-3-911578-03-5,BibTeX 键为 molnar2025。

七、结语:一份 CHANGELOG 里藏着的写作方法论

纵观 v0.1 到 v3.0 的完整演进,这本可解释机器学习指南的版本历史本身就是一堂关于技术写作与开源协作的实践课:

  • 术语要跟随社区:章节命名从自创描述转向 LIME、SHAP、Saliency Maps 等通用术语,降低读者的认知成本;
  • 结构要服务认知:从全局先行到局部先行,从长篇铺垫到压缩直入,章节组织始终服务于"读者最快学到方法"这一目标;
  • 数据要可靠可复现:发现标签编码错误后不修补、而是果断换用更合适的数据集,并将预处理脚本开源在仓库中;
  • 严谨性要靠勘误机制:每个版本都伴随公式与索引的修正,配以持续集成保证渲染正确性。

对于正在撰写技术文档或维护开源书籍的开发者来说,这份 CHANGELOG 提供了一个可复用的范本:把每一次"为什么改、改了什么、修了什么"都如实记录下来,就是给未来读者和协作者最好的路标。

登录后查看全文
interpretable-ml-book