由于对人工智能偏见的担心日益凸显,从业者解释模型产出的预测结果的能力以及解释模型自身运作机制的能力变的越来越重要。幸运的是,已经有许多python工具集被开发出来,用以解决上述问题。下文我将对现有4个建立的比较完善的翻译和解释机器学习模型的工具包做简要的指导性描述。

这些工具包都可以通过pip来进行安装,拥有完善的文档,并且强调通过可视化来提升可解释性。

yellowbrick

这个工具包本质上,是scikit-learn的一个扩展,提供了一些非常实用且好看的机器学习模型可视化工具。`visualiser`对象是核心接口,是一个scikit-learn估计器,所以如果你之前熟悉scikit-learn的工作流程,那么将对此非常熟悉。

这个可视化工具覆盖了模型选择,特征重要性和模型性能分析等方面。

让我们看几个简短的例子。

该工具包可以通过pip安装,

  1. pip install yellowbrick

为了展示工具包中的一些特性,我们将利用scikit-learn中的红酒识别数据集。这个数据集包含13个特征以及3个目标类别。可以通过scikit-learn直接加载。在下面的代码里我引入数据集,并把转换成pandas dataframe。数据集可以直接被用来训练模型,并不需要其他的数据处理。

  1. import pandas as pd
  2. from sklearn import datasets
  3. wine_data = datasets.load_wine()
  4. df_wine = pd.DataFrame(wine_data.data,columns=wine_data.feature_names)
  5. df_wine['target'] = pd.Series(wine_data.target)

利用scikit-learn进一步将数据分为测试集合和训练集。

  1. import pandas as pd
  2. from sklearn import datasets
  3. wine_data = datasets.load_wine()
  4. df_wine = pd.DataFrame(wine_data.data,columns=wine_data.feature_names)
  5. df_wine['target'] = pd.Series(wine_data.target)

接下来,我们用yellowbrick的visualiser观察特征之间的相关性。

  1. import pandas as pd
  2. from sklearn import datasets
  3. wine_data = datasets.load_wine()
  4. df_wine = pd.DataFrame(wine_data.data,columns=wine_data.feature_names)
  5. df_wine['target'] = pd.Series(wine_data.target)

现在,我们拟合一个随机森林分类器,并通过另一个visualiser评价其性能。

  1. from yellowbrick.classifier import ClassificationReport
  2. from sklearn.ensemble import RandomForestClassifier
  3. model =  RandomForestClassifier()
  4. visualizer = ClassificationReport(model, size=(1080, 720))
  5. visualizer.fit(X_train, y_train)
  6. visualizer.score(X_test, y_test)
  7. visualizer.poof()

ELI5

ELI5是另一个可视化工具包,在模型机器学习模型调试和解释其产出的预测结果方面非常有用。它能够同大多数通用的python机器学习工具包一起使用,包括scikit-learn和XGBoost,以及Keras。

让我们用ELI5来观察一下上面我们训练的模型的特征重要性。

  1. import eli5
  2. eli5.show_weights(model, feature_names = X.columns.tolist())

默认的,`show_weights`方法采用GAIN来计算权重,但你也可以传入其他`importance_type`来控制特征重要性的计算。

也可以通过`show_prediction`来观察某一个样本的预测结果的原因。

  1. from eli5 import show_predictionshow_prediction(model, X_train.iloc[1], feature_names = X.columns.tolist(),
  2. show_feature_values=True)

LIME

LIME(模型无关局部可解释)是一个用来解释模型做出的预测的工具包。LIME支持对多种分类器的单个样本预测进行解释,并且原生支持scikit-learn。

下面让我们用LIME对上述我们训练的模型的一些预测进行解释。

LIME可以用pip进行安装

  1. pip install lime

首先我们构建explainer,它通过训练数据集数组,模型中用到的特征名称和目标变量的类别名称作为初始化参数。

  1. import lime.lime_tabular
  2. explainer = lime.lime_tabular.LimeTabularExplainer(X_train.values,                                            feature_names=X_train.columns.values.tolist(),                                        class_names=y_train.unique())

接下来,我们创建一个lambda函数,它表示用模型预测一个样本。详见这个优秀的,更有深度的LIME教程。首先我们构建explainer,它通过训练数据集数组,模型中用到的特征名称和目标变量的类别名称作为初始化参数。

  1. predict_fn = lambda x: model.predict_proba(x).astype(float)

随后,我们利用explainer解释指定样本的预测结果。其结果如下。LIME通过可视化的结果,展示特征如果对得到的预测结果产生影响。

  1. exp = explainer.explain_instance(X_test.values[0], predict_fn, num_features=6)
  2. exp.show_in_notebook(show_all=False)

MLxtend

这个工具包包含一系列机器学习可用的工具函数。包括通过stacking和voting构建的分类器,模型的评估,特征的提取、特征工程和可视化。除了该工具包的文档,这篇论文也是理解工具包更多细节的好资源。

下面让我们利用MLxtend来比较Ensemble后的分类器的分类边界与组成他的子分类器的分类边界有什么不同。

同样MLxtend也可以通过pip安装。

  1. pip install mlxtend

引入一些工具包,

  1. from mlxtend.plotting import plot_decision_regions
  2. from mlxtend.classifier import EnsembleVoteClassifier
  3. import matplotlib.gridspec as gridspec
  4. import itertools
  5. from sklearn import model_selection
  6. from sklearn.linear_model import LogisticRegression
  7. from sklearn.naive_bayes import GaussianNB
  8. from sklearn.ensemble import RandomForestClassifier

下面的可视化工具一次只能接受两个特征作为输入,所以我们创建了数组['proline', 'color_intensity']。因为这两个特征在上述利用ELI5分析时,具有最高的特征重要性。引入一些工具包,

  1. X_train_ml = X_train[['proline', 'color_intensity']].values
  2. y_train_ml = y_train.values

接下来,我们创建一些分类器,并在训练数据上进行拟合,通过MLxtend可视化他们的决策边界。输出来自下面的代码。

  1. clf1 = LogisticRegression(random_state=1)
  2. clf2 = RandomForestClassifier(random_state=1)
  3. clf3 = GaussianNB()
  4. eclf = EnsembleVoteClassifier(clfs=[clf1, clf2, clf3], weights=[1,1,1])
  5. value=1.5
  6. width=0.75
  7. gs = gridspec.GridSpec(2,2)
  8. fig = plt.figure(figsize=(10,8))
  9. labels = ['Logistic Regression', 'Random Forest', 'Naive Bayes', 'Ensemble']
  10. for clf, lab, grd in zip([clf1, clf2, clf3, eclf],
  11. labels,
  12. itertools.product([0, 1], repeat=2)):
  13. clf.fit(X_train_ml, y_train_ml)
  14. ax = plt.subplot(gs[grd[0], grd[1]])
  15. fig = plot_decision_regions(X=X_train_ml, y=y_train_ml, clf=clf)
  16. plt.title(lab)

以上绝对不是模型可解释和可视化工具包的完整列表。这篇博文罗列了包含其他有用的工具包的列表,值得一试。

感谢阅读!

用于可解释机器学习的 Python 库相关推荐

  1. python 分类变量xgboost_用于可解释机器学习的四个Python库

    我们知道,人工智能也可能存在偏差,随着大家对这一点的关注度越来越高,企业越来越需要能够对其模型产生的预测进行解释,了解模型本身是如何工作的.好的一点是,有越来越多的Python库正在开发中,试图解决这 ...

  2. python的顶级库_三大用于数据科学的顶级Python库

    Python有许多吸引力,如效率,代码可读性和速度,使其成为数据科学爱好者的首选编程语言.Python通常是希望升级其应用程序功能的数据科学家和机器学习专家的首选. 由于其广泛的用途,Python拥有 ...

  3. python 生成空白矩阵_3个用于数据科学的顶级Python库

    用这些库把Python变成一个科学数据分析和建模工具. image by Opensource.com Python许多吸引人的特点如效率.代码可读性和速度使它成为数据科学爱好者的首选编程语言.对于希 ...

  4. pypdf2 存储pdf_PyPDF2:用于PDF文件操作的Python库

    pypdf2 存储pdf PyPDF2 is a pure-python library to work with PDF files. We can use the PyPDF2 module to ...

  5. python做个游戏辅助_8个用于辅助项目的出色Python库

    python做个游戏辅助 在Python / Django世界中我们有一句俗语:我们是为语言而来的,而是为社区而留下的. 对我们大多数人来说都是如此,但是让我们留在Python世界中的另一件事是,有了 ...

  6. 【转】8 个用于业余项目的优秀 Python 库

    在数据库中即时保存数据:Dataset 当我们想要在不知道最终数据库表长什么样的情况下,快速收集数据并保存到数据库中的时候,Dataset 库将是我们的最佳选择.Dataset 库有一个简单但功能强大 ...

  7. python中led是什么意思_用于检测LED闪光灯的Python库

    很有可能解决这个问题.正如@John Percival Hackworth所说,opencv是解决这个问题的一个好选择.我可以给你一些建议.在拍一张带发光二极管的电路板的照片,因为你知道发光二极管的颜 ...

  8. python 博弈论 库_6个Python库解释机器学习模型并建立信任

    在机器学习模型中建立信任的案例 全球道路上大约有12亿辆汽车.这是一个令人毛骨悚然的问题-您认为实际上有多少驾驶员了解车辆的内部运行情况? 正如您可能已经猜到的,答案只有少数几个人.我们不需要了解驾驶 ...

  9. 让机器学习自动帮我们建模,这4个Python库能让你大开眼界

    自动机器学习(通常简称为AutoML)是一个新兴的领域,在这个领域中,通过建立机器学习模型来对数据进行建模的过程是自动化的.AutoML能让建模变得更容易,也能让每个人更容易访问. 如果你对AutoM ...

最新文章

  1. mysql的配置文件几个_mysql多实例(多个配置文件方式)
  2. 欺诈网站都注重用户体验!你,还在等什么?!
  3. 对于随机过程方面书籍的评论(转贴)
  4. Error Handling in ASP.NET Core
  5. 【H.264/AVC视频编解码技术】序章【编码的前世今生】
  6. 给出一个数:(1)求解有几位数,(2)分别输出每一位数字(3)按逆序输出各位数字
  7. oracle rollup 排序,Oracle教程之rollup用法
  8. 321电商学院 与华中师大联手 - 2014-10-22
  9. 小程序读取云服务器,小程序读取云服务器
  10. 黑鲨官网装机大师工具如何制作u盘启动盘,u盘启动盘制作方法
  11. 西门子主程序调用子程序_西门子PLC调用子程序的方法
  12. 数据结构试卷(一)及答案
  13. DXGI 方式采集流程
  14. 查询计算机记录,电脑使用记录查询软件_电脑使用记录查询
  15. uni-app 对接企业微信登录
  16. 睿智的目标检测27——Pytorch搭建Faster R-CNN目标检测平台
  17. Games101课程笔记_lecture20_color颜色
  18. 小程序流量主广告赚钱
  19. Android:Handler中的Idle Handler
  20. U8g2库的详细使用

热门文章

  1. ztree树封装 json实例_小白7天入门PHP Web开发 - Day 6[下](综合)个人博客实例讲解用户数据的存储...
  2. C语言试卷终稿,C语言试卷终稿B1.doc
  3. 计算机网络的八股文自述(持续更新)
  4. RandomUnderSampler 中的fit_resample 是 imblearn.base.py中调用output = self._fit_resample(X, y)
  5. LSTM输入输出结构
  6. torch.nn.softmax()
  7. 论坛报名 | 李开复张亚勤陆奇共论AI时代的创业
  8. 一位入行4年的优化师是怎么写出一本信息流广告入门书的?
  9. 《程序员书屋》微刊创建,赠书活动进行中!
  10. C#经典再现——《C#本质论》