跳转到主要内容

调试机器学习分类器并解释其预测

项目描述

PyPI Version Build Status Code Coverage Documentation

ELI5是一个Python包,帮助调试机器学习分类器并解释其预测。

explain_prediction for text data explain_prediction for image data

它支持以下机器学习框架和包

  • 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。

有关更多信息,请检查 文档


define hyperiongray

变更日志

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_dfeli5.explain_weights_dfseli5.explain_prediction_dfeli5.explain_prediction_dfseli5.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》支持LGBMClassifierLGBMRegressor(请参阅《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_weightseli5.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_weightseli5.show_prediction 函数;

  • eli5.explain_weightseli5.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 (216.2 kB 查看哈希值)

上传时间 源代码

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面