调试机器学习分类器并解释其预测
项目描述
ELI5是一个Python包,帮助调试机器学习分类器并解释其预测。
它支持以下机器学习框架和包
scikit-learn. 目前ELI5允许解释scikit-learn线性分类器和回归器的权重和预测,以文本或SVG格式打印决策树,显示特征重要性和解释决策树和基于树的集成模型的预测。ELI5理解scikit-learn中的文本处理工具,并相应地突出显示文本数据。支持Pipeline和FeatureUnion。它还允许通过取消哈希来调试包含HashingVectorizer的scikit-learn管道。
Keras - 通过Grad-CAM可视化解释图像分类器的预测。
xgboost - 显示XGBClassifier、XGBRegressor和xgboost.Booster的特征重要性和预测。
LightGBM - 显示LGBMClassifier、LGBMRegressor和lightgbm.Booster的特征重要性和预测。
CatBoost - 显示CatBoostClassifier、CatBoostRegressor和catboost.CatBoost的特征重要性。
lightning - 解释lightning分类器和回归器的权重和预测。
sklearn-crfsuite。ELI5 允许检查 sklearn_crfsuite.CRF 模型的权重。
ELI5 还实现了几种算法来检查黑盒模型(见 检查黑盒估计器)
TextExplainer 允许使用 LIME 算法(Ribeiro 等人,2016年)解释任何文本分类器的预测。还有用于使用 LIME 与非文本数据和任意黑盒分类器的实用工具,但此功能目前处于实验性阶段。
排列重要性 方法可用于计算黑盒估计器的特征重要性。
解释和格式化是分开的;您可以将基于文本的解释显示在控制台、嵌入到 IPython 笔记本或网页仪表板中的 HTML 版本、如果您想进一步处理结果,则是一个 pandas.DataFrame 对象,或者允许在客户端上实现自定义渲染和格式的 JSON 版本。
许可证是 MIT。
有关更多信息,请检查 文档。
变更日志
0.13.0 (2022-05-11)
删除对 python2.7 的支持
修复了与新 xgboost 兼容的未命名特征
0.12.0 (2022-05-11)
使用 Jinja2 >= 3.0.0,如果您希望使用较旧的 Jinja2 版本,请使用 eli5 0.11
支持 lightgbm.Booster
0.11.0 (2021-01-23)
修复了 scikit-learn 0.22+ 和 0.24+ 的支持。
允许排列重要性中的 nan 输入(如果模型支持它们)。
修复了具有样本权重和交叉验证的排列重要性。
文档修复(拼写错误、keras 和 TF 版本已明确)。
不要使用已弃用的 getargspec 函数。
更少的类型忽略,mypy 更新到 0.750。
在 GI 上测试了 python 3.8 和 3.9,不再测试 python 3.4。
将测试移动到 github actions。
0.10.1 (2019-08-29)
不要包含 Python 3.5+ 的类型依赖关系以修复 Python 3.7 的安装。
0.10.0 (2019-08-21)
Keras 图像分类器:使用 Grad-CAM 解释预测(由 @teabolt 执行的 GSoC-2019 项目)。
0.9.0 (2019-07-05)
CatBoost 支持:显示 CatBoostClassifier、CatBoostRegressor 和 catboost.CatBoost 的特征重要性。
测试修复:修复了 scikit-learn 0.21+ 的修复,使用基于 xenial 的 Travis。
捕获不正确安装的 LightGBM 的异常。
0.8.2 (2019-04-04)
修复了 scikit-learn 0.21+ 的支持(随机线性模型已从 scikit-learn 中删除);
修复了 PermutationImportance 的 pandas.DataFrame + xgboost 支持;
修复了与最近版 numpy 的测试。
添加了 conda 安装说明(conda 软件包由社区维护);
教程已更新以使用 xgboost 0.81;
更新文档以使用 pandoc 2.x。
0.8.1 (2018-11-19)
修复了 Python 3.7 的支持;
添加了对 XGBoost > 0.6a2 的支持;
修复了 numpy >= 1.14 中的弃用警告;
文档、类型注释和测试改进。
0.8 (2017-08-25)
不向后兼容:带有解释的 DataFrame 对象不再使用索引和交叉表,现在只是简单的 DataFrame;
添加了用于检查黑盒模型的新方法(eli5-permutation-importance);
为 sklearn 的 MinMaxScaler、StandardScaler、MaxAbsScaler 和 RobustScaler 实现了 transfor_feature_names;
不再隐藏零和负特征重要性;
修复了与 scikit-learn 0.19 的兼容性;
修复了与 LightGBM master(2.0.5 和 2.0.6 仍不支持 - LightGBM 中存在错误)的兼容性;
文档、测试和类型注释改进。
0.7 (2017-07-03)
更好的 pandas.DataFrame 集成:eli5.explain_weights_df、eli5.explain_weights_dfs、eli5.explain_prediction_df、eli5.explain_prediction_dfs、eli5.format_as_dataframe <eli5.formatters.as_dataframe.format_as_dataframe> 和 eli5.format_as_dataframes <eli5.formatters.as_dataframe.format_as_dataframes> 函数允许将解释导出到 pandas.DataFrames。
《eli5.explain_prediction》现在显示二元分类器的预测类别(之前总是显示正类别);
《eli5.explain_prediction》现在支持二元分类器的targets=[<类别>];例如,要显示负类别的结果,可以使用eli5.explain_prediction(..., targets=[False]);
支持《eli5.explain_prediction》和《eli5.explain_weights》对基于libsvm的线性估计器(来自sklearn.svm的:SVC(kernel='linear')(仅二元分类),NuSVC(kernel='linear')(仅二元分类),SVR(kernel='linear'),NuSVR(kernel='linear'),OneClassSVM(kernel='linear'));
修复了在Python 2中对LightGBM估计器(当importance_type为‘split’或‘weight’时)的eli5.explain_weights;
进行改进测试。
0.6.4 (2017-06-22)
修复了针对最近版本的LightGBM的《eli5.explain_prediction》;
修复了formatters.html中的Python 3弃用警告;
进行改进测试。
0.6.3 (2017-06-02)
《eli5.explain_weights》和《eli5.explain_prediction》现在与xgboost.Booster一起工作,而不仅仅是与sklearn-like API;
《eli5.formatters.as_dict.format_as_dict》现在可以作为eli5.format_as_dict使用;
测试和文档修复。
0.6.2 (2017-05-17)
针对在pandas.DataFrame上训练的XGBoost模型的可读性增强了《eli5.explain_weights》;
针对在pandas.DataFrame上训练的LightGBM模型的可读性增强了《eli5.explain_weights》;
修复了当特征名称包含点时,针对在pandas.DataFrame上训练的XGBoost模型的《eli5.explain_prediction》的问题;
进行改进测试。
0.6.1 (2017-05-10)
在《eli5.explain_prediction》中对xgboost、sklearn、LightGBM和lightning的pandas支持更好;
0.6 (2017-05-03)
在《eli5.explain_weights》中对scikit-learn Pipeline的支持更好:现在可以直接传递Pipeline对象。目前仅支持基于SelectorMixin的转换器、FeatureUnion以及具有get_feature_names的转换器,但用户可以注册其他转换器;支持转换器的内置列表将在未来扩展。有关更多信息,请参阅sklearn-pipelines;
通过FeatureUnion支持了《eli5.sklearn.unhashing.invert_hashing_and_fit》的HashingVectorizer的倒置。请参阅《eli5-unhashing》;
修复了与Jupyter Notebook >= 5.0.0的兼容性问题;
修复了Lasso回归中只有一个特征且没有截距的《eli5.explain_weights》;
修复了在Python 2.x中的unhashing支持;
文档和测试改进。
0.5 (2017-04-27)
对LightGBM的支持:现在《eli5.explain_prediction》和《eli5.explain_weights》支持LGBMClassifier和LGBMRegressor(请参阅《eli5 LightGBM支持 <library-lightgbm>》);
修复了所有权重为零时的文本格式化问题;
类型检查现在使用最新的mypy;
测试设置改进:Travis CI现在使用Ubuntu 14.04。
0.4.2 (2017-03-03)
修复了bug:如果xgboost可用但未正确安装,eli5应保持可导入;
0.4.1 (2017-01-25)
修复了《eli5.xgboost.explain_prediction_xgboost》的特征贡献计算;
0.4 (2017-01-20)
《eli5.explain_prediction》:新的‘top_targets’参数允许只显示具有最高或最低得分的预测;
《eli5.explain_weights》允许使用importance_type参数自定义XGBClassifier和XGBRegressor的特征重要性计算方式(请参阅《eli5 XGBoost支持 <library-xgboost>》的文档);
《eli5.explain_weights》默认使用增益来计算XGBClassifier和XGBRegressor的特征重要性;这种方法是更好的指示,并且使结果与scikit-learn梯度提升方法的特征重要性显示更兼容;
0.3.1 (2017-01-16)
打包修复:在setup.py中添加了scikit-learn到install_requires。
0.3 (2017-01-13)
eli5.explain_prediction 适用于 XGBoost 的 XGBClassifier 和 XGBRegressor,以及 scikit-learn 中的 ExtraTreesClassifier、ExtraTreesRegressor、GradientBoostingClassifier、GradientBoostingRegressor、RandomForestClassifier、RandomForestRegressor、DecisionTreeClassifier 和 DecisionTreeRegressor。解释方法基于 http://blog.datadive.net/interpreting-random-forests/。
eli5.explain_weights 现在支持 scikit-learn 的基于树的回归器:DecisionTreeRegressor、AdaBoostRegressor、GradientBoostingRegressor、RandomForestRegressor 和 ExtraTreesRegressor。
eli5.explain_weights 适用于 XGBRegressor。
新增 TextExplainer <lime-tutorial> 类,允许使用 LIME 算法解释黑盒文本分类管道的预测;对 eli5.lime <eli5-lime> 进行了许多改进。
在 eli5.explain_prediction 中改进了对 sklearn.pipeline.FeatureUnion 的支持;
渲染性能得到提升;
当特征重要性表被截断时,会显示一些剩余的特征重要性;
修复了特征重要性表的样式;
eli5.explain_weights 和 eli5.explain_prediction 支持更多的 scikit-learn 线性估计器:HuberRegressor、LarsCV、LassoCV、LassoLars、LassoLarsCV、LassoLarsIC、OrthogonalMatchingPursuit、OrthogonalMatchingPursuitCV、PassiveAggressiveRegressor、RidgeClassifier、RidgeClassifierCV、TheilSenRegressor。
决策树文本格式的变化:对于二元分类树,只打印“真实”类的概率,而不是像之前那样打印两个概率。
eli5.explain_weights 除了 feature_re 以外,还支持 feature_filter 用于过滤特征,而 eli5.explain_prediction 现在也支持这两个参数;
在 eli5.explain_prediction 的输出中,将“Weight”列重命名为“Contribution”;
新增 show_feature_values=True 格式化参数允许显示输入特征值;
修复了 analyzer=’char_wb’ 在文本开头的高亮显示问题;
0.2 (2016-12-03)
支持 XGBClassifier(来自 XGBoost 包);
eli5.explain_weights 支持 sklearn OneVsRestClassifier;
特征重要性的标准差不再在不可用的情况下打印为零。
0.1.1 (2016-11-25)
打包修复:要求 attrs > 16.0.0,修复了 README 渲染;
0.1 (2016-11-24)
HTML 输出;
IPython 集成;
JSON 输出;
可视化 scikit-learn 文本向量器;
sklearn-crfsuite 支持;
lightning 支持;
eli5.show_weights 和 eli5.show_prediction 函数;
eli5.explain_weights 和 eli5.explain_prediction 函数;
eli5.lime <eli5-lime> 改进:支持非文本数据的采样器,修复了错误,文档;
支持 HashingVectorizer 进行回归任务;
性能改进 - 特征名称是延迟加载的;
支持 sklearn ElasticNetCV 和 RidgeCV;
现在可以自定义输出格式 - 显示/隐藏部分,更改布局;
支持 sklearn OneVsRestClassifier;
支持 sklearn DecisionTreeClassifier 可视化(基于文本或 SVG);
停止支持 scikit-learn < 0.18;
基本 mypy 类型注解;
feature_re 参数允许仅显示特征子集;
target_names 参数允许更改目标/类别的显示名称;
targets 参数允许显示目标/类别的子集并更改它们的显示顺序;
文档,更多示例。
0.0.6 (2016-10-12)
eli5.sklearn.InvertableHashingVectorizer 中的候选特征按其频率排序,第一个候选始终为正。
0.0.5 (2016-09-27)
在 explain_prediction 中支持 HashingVectorizer;
添加传递系数缩放数组选项;如果您想比较输入中特征缩放或符号不同的系数,则很有用;
修复了错误:分类器的权重不再由 eli5 函数更改。
0.0.4 (2016-09-24)
eli5.sklearn.InvertableHashingVectorizer 和 eli5.sklearn.FeatureUnhasher 允许恢复使用 HashingVectorizer 或 FeatureHasher 的管道的特征名称;
增加了对 scikit-learn 线性回归模型(ElasticNet、Lars、Lasso、LinearRegression、LinearSVR、Ridge、SGDRegressor)的支持;
在 explain_prediction 函数中交换了 doc 和 vec 参数;如果示例已经矢量化,则现在可以省略 vec;
修复了密集特征向量的问题;
将所有 class_names 参数重命名为 target_names;
修复了 scikit-learn 集成估计器的特征名称猜测问题;
进行改进测试。
0.0.3 (2016-09-21)
支持使用 LIME(http://arxiv.org/abs/1602.04938)算法的任何黑盒分类器;文本数据支持是内置的;
sklearn.explain_prediction 的“vectorized”参数允许传递已经矢量的示例;
允许显式传递 feature_names;
支持使用自动生成的特征名称的没有 get_feature_names 方法的分类器;
0.0.2 (2016-09-19)
explain_prediction 的“top”参数可以是元组(num_positive,num_negative);
默认情况下不再打印分类器名称;
添加了 eli5.sklearn.explain_prediction 来解释单个示例;
修复了 numpy 警告。
0.0.1 (2016-09-15)
预发布版。
项目详情
eli5-0.13.0.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | ec8459eaaf09d66743c53a7bdb115c6cda7e533d7a5d02a5a8bb717ee843eb37 |
|
MD5 | f0cb57765db4a7d5e66a3c2051c5c073 |
|
BLAKE2b-256 | b5303be87d2a7ca12a6ec45b8a5f6fd10be9992cc4b239dfb029c80091add477 |