Python 包,用于简洁、透明和准确的预测建模。
全部兼容 sklearn 且易于使用。
对 NLP 的可解释性,请查看我们的新包:imodelsX
现代机器学习模型越来越复杂,通常难以解释。此包提供了一个简单的界面来拟合和使用最先进的可解释模型,所有模型都兼容 scikit-learn。这些模型通常可以用更简单的模型(例如规则列表)替代黑箱模型(例如随机森林),同时提高可解释性和计算效率,而不会牺牲预测准确性!只需导入分类器或回归器,并使用 fit
和 predict
方法,与标准 scikit-learn 模型相同。
from sklearn.model_selection import train_test_split
from imodels import get_clean_dataset, HSTreeClassifierCV # 在此处导入任何 imodels 的模型
# 准备数据(一个样本临床数据集)
X, y, feature_names = get_clean_dataset('csi_pecarn_pred')
X_train, X_test, y_train, y_test = train_test_split(
X, y, random_state=42)
# 拟合模型
model = HSTreeClassifierCV(max_leaf_nodes=4) # 初始化树模型并指定仅有 4 个叶节点
model.fit(X_train, y_train, feature_names=feature_names) # 拟合模型
preds = model.predict(X_test) # 离散预测值:形状为 (n_test, 1)
preds_proba = model.predict_proba(X_test) # 预测概率:形状为 (n_test, n_classes)
print(model) # 打印模型
------------------------------
具有层次缩减的决策树
通过查看合适树叶中的值来进行预测
------------------------------
|--- FocalNeuroFindings2 <= 0.50
| |--- HighriskDiving <= 0.50
| | |--- Torticollis2 <= 0.50
| | | |--- 值: [0.10]
| | |--- Torticollis2 > 0.50
| | | |--- 值: [0.30]
| |--- HighriskDiving > 0.50
| | |--- 值: [0.68]
|--- FocalNeuroFindings2 > 0.50
| |--- 值: [0.42]
安装
使用 pip install imodels
安装(请参见 此处 获取帮助)。
支持的模型
模型 | 参考资料 | 描述 |
---|---|---|
Rulefit 规则集 | 🗂️, 🔗, 📄 | 在从决策树提取的规则上拟合稀疏线性模型 |
Skope 规则集 | 🗂️, 🔗 | 从梯度提升树中提取规则,去重后,基于其 OOB 精度线性组合 |
提升规则集 | 🗂️, 🔗, 📄 | 使用 Adaboost 依次拟合一组规则 |
Slipper 规则集 | 🗂️, , ㅤㅤ📄 | 使用 SLIPPER 依次学习规则集 |
贝叶斯规则集 | 🗂️, 🔗, 📄 | 使用贝叶斯采样找到简洁的规则集(较慢) |
最优规则列表 | 🗂️, 🔗, 📄 | 使用全局优化算法(CORELS)拟合规则列表 |
贝叶斯规则列表 | 🗂️, 🔗, 📄 | 使用贝叶斯采样拟合紧凑的规则列表(较慢) |
贪婪规则列表 | 🗂️, 🔗 | 使用 CART 拟合列表(仅单一路径),而不是树 |
OneR 规则列表 | 🗂️, , 📄 | 拟合仅限于一个特征的规则列表 |
最优规则树 | 🗂️, 🔗, 📄 | 使用全局优化算法(GOSDT)拟合简洁的树 |
贪婪规则树 | 🗂️, 🔗, 📄 | 使用 CART 贪婪地拟合树 |
C4.5 规则树 | 🗂️, 🔗, 📄 | 使用 C4.5 贪婪地拟合树 |
TAO 规则树 | 🗂️, , ㅤㅤ📄 | 使用交替优化拟合树 |
迭代随机 森林 | 🗂️, 🔗, 📄 | 反复拟合随机森林,给予具有 高重要性的特征更高的选择概率 |
稀疏整数 线性模型 | 🗂️, , ㅤㅤ📄 | 带有整数系数的稀疏线性模型 |
树 GAM | 🗂️, 🔗, 📄 | 使用短的提升树拟合广义可加模型 |
贪婪树 求和 (FIGS) | 🗂️, , ㅤㅤ📄 | 带有很少总规则的小树之和 (FIGS) |
层次 缩减包装 | 🗂️, , ㅤㅤ📄 | 通过超快速的事后正则化改进决策树、随机森林或 梯度提升集群 |
RF+ (MDI+) | 🗂️, , ㅤㅤ📄 | 基于随机森林的灵活特征重要性 |
蒸馏包装 | 🗂️ | 训练一个黑箱模型, 然后将其提取为可解释模型 |
自动机器学习包装 | 🗂️ | 自动拟合和选择可解释模型 |
更多模型 | ⌛ | (敬请期待!) 轻量级规则归纳、MLRules 等 |
🗂️ 文档 🔗 参考代码实现 📄 研究论文
演示笔记
演示笔记包含在 notebooks 文件夹中。
快速入门演示
展示如何用不同的可解释模型进行拟合、预测和可视化Autogluon 演示
使用 Autogluon AutoML 自动拟合/选择一个可解释模型快速入门 colab 演示
展示如何用不同的可解释模型进行拟合、预测和可视化临床决策规则笔记
展示一个使用imodels
导出临床决策规则的示例
事后分析
我们还包括一些事后分析的演示,即在拟合模型之后: posthoc.ipynb 显示了不同的简单分析来解释经过训练的模型和 uncertainty.ipynb 包含获取模型的不确定性估计的基本代码模型之间有什么区别?
上述模型的最终形式采取以下形式之一,旨在同时简单易懂且具有高预测性:
规则集 | 规则列表 | 规则树 | 代数模型 |
---|---|---|---|
不同的模型和算法不仅在最终形式上有所不同,而且在建模过程中所做的选择也不同,例如它们如何生成、选择和后处理规则:
规则候选生成 | 规则选择 | 规则后处理 |
---|---|---|
例如. RuleFit vs. SkopeRules
RuleFit 和 SkopeRules 仅在修剪规则的方式上有所不同:RuleFit 使用线性模型,而 SkopeRules 使用启发式方法去重共享重叠的规则。例如. 贝叶斯规则列表 vs. 贪婪规则列表
贝叶斯规则列表和贪婪规则列表在选择规则的方式上有所不同;贝叶斯规则列表对可能的规则列表进行全局优化,而贪婪规则列表则按顺序选择分裂以最大化给定标准。例如. FPSkope vs. SkopeRules
FPSkope 和 SkopeRules 仅在生成候选规则的方式上有所不同:FPSkope 使用 FPgrowth,而 SkopeRules 从决策树中提取规则。对不同任务的支持
不同的模型支持不同的机器学习任务。当前对不同模型的支持如下(可以直接从 imodels 导入每个模型,例如 from imodels import RuleFitClassifier
):
模型 | 二分类 | 回归 | 备注 |
---|---|---|---|
Rulefit 规则集 | RuleFitClassifier | RuleFitRegressor | |
Skope 规则集 | SkopeRulesClassifier | ||
提升规则集 | BoostedRulesClassifier | BoostedRulesRegressor | |
SLIPPER 规则集 | SlipperClassifier | ||
贝叶斯规则集 | BayesianRuleSetClassifier | 对于大问题失败 | |
最优规则列表 (CORELS) | OptimalRuleListClassifier | 需要 corels,大问题时失败 | |
贝叶斯规则列表 | BayesianRuleListClassifier | ||
贪婪规则列表 | GreedyRuleListClassifier | ||
OneR 规则列表 | OneRClassifier | ||
最优规则树 (GOSDT) | OptimalTreeClassifier | 需要 gosdt,大问题时失败 | |
贪婪规则树 (CART) | GreedyTreeClassifier | GreedyTreeRegressor | |
C4.5 规则树 | C45TreeClassifier | ||
TAO 规则树 | TaoTreeClassifier | TaoTreeRegressor | |
迭代随机森林 | IRFClassifier | 需要 irf | |
稀疏整数线性模型 | SLIMClassifier | SLIMRegressor | 需要额外的依赖以提高速度 |
树 GAM | TreeGAMClassifier | TreeGAMRegressor | |
贪婪树和 (FIGS) | FIGSClassifier | FIGSRegressor | |
分层收缩 | HSTreeClassifierCV | HSTreeRegressorCV | 包装任何基于 sklearn 的树模型 |
蒸馏 | DistilledRegressor | 包装任何与 sklearn 兼容的模型 | |
自动机器学习模型 | AutoInterpretableClassifier️ | AutoInterpretableRegressor️ |
额外的
我们最喜爱的模型
在开发和玩 imodels
之后,我们开发了一些新的模型以克服现有可解释模型的局限性。
FIGS: 快速可解释的贪婪树和
快速可解释的贪婪树和 (FIGS) 是一种用于拟合简洁规则模型的算法。具体来说,FIGS 将 CART(分类回归树)推广到同时增长灵活数量的树的叠加。通过预设的阈值,可以限制所有树的总分裂次数,从而保持模型的可解释性。在广泛的现实世界数据集上的实验表明,当限制在少量分裂(例如少于 20 次)时,FIGS 实现了先进的预测性能。
示例 FIGS 模型。 FIGS 学习一组包含灵活数量的树的和模型;以其预测时,它会将所有树的结果相加。
分层收缩:基于树模型的事后正则化
分层收缩是一种非常快速的事后正则化方法,可作用于任何决策树(或基于树的集成,如随机森林)。它不会修改树的结构,而是通过将每个节点的预测收缩到其祖先的样本均值进行正则化(使用一个单一的正则化参数)。在广泛的数据库上的实验表明,分层收缩大幅提高了单个决策树和决策树集成的预测性能。
HS 示例。 HS 通过将每个节点收缩到其父节点的方向对任何决策树应用事后正则化。
MDI+: 灵活的基于树的特征重要性
📄 论文, 🔗 博文, 📌 引用 MDI+ 是一个新颖的特征重要性框架,它推广了随机森林中流行的平均杂质减少(MDI)重要性评分。在其核心,MDI+ 扩展了最近发现的线性回归和决策树之间的联系。通过这样做,MDI+ 使从业者能够(1)根据数据/问题结构定制特征重要性计算,(2)结合附加特征或知识来减轻决策树已知的偏差。在实际数据案例研究和广泛的真实数据模拟中,MDI+ 在很大程度上优于常用的特征重要性度量(例如 MDI、基于置换的评分和 TreeSHAP)。
参考文献
阅读材料
参考实现(如上所述)
这里的代码大量借鉴了以前项目的精彩工作。我们试图提取、统一并维护这些项目的关键部分。- pycorels - 由 @fingoldin 和 CORELS 原始团队 创作
- sklearn-expertsys - 由 @tmadl 和 @kenben 根据 Ben Letham 的原始代码创作
- rulefit - 由 @christophM 创作
- skope-rules - 由 skope-rules 团队 创作(包括 @ngoix、@floriangardin、@datajms、Bibi Ndiaye、Ronan Gautier)
- boa - 由 @wangtongada 创作
相关包
- gplearn:符号回归/分类
- pysr:快速符号回归
- pygam:生成性加性模型
- interpretml:基于提升的加性模型
- h20 ai:加性模型和广义线性模型(及更多)
- optbinning:数据离散化/评分模型
如果在学术作品中使用此包,请引用:
@software{
imodels2021,
title = {imodels: a python package for fitting interpretable models},
journal = {Journal of Open Source Software},
publisher = {The Open Journal},
year = {2021},
author = {Singh, Chandan and Nasseri, Keyan and Tan, Yan Shuo and Tang, Tiffany and Yu, Bin},
volume = {6},
number = {61},
pages = {3192},
doi = {10.21105/joss.03192},
url = {https://doi.org/10.21105/joss.03192},
}