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

原标题:6个Python库解释机器学习模型并建立信任

在机器学习模型中建立信任的案例

全球道路上大约有12亿辆汽车。这是一个令人毛骨悚然的问题-您认为实际上有多少驾驶员了解车辆的内部运行情况?

您可能已经猜到了,答案只是少数几个人。我们不需要了解驾驶车辆的内部操作。因此,对于我们大多数人来说,这辆车是一个黑匣子,但它确实为驾驶员做好了工作。但是设计和制造车辆的人呢?他们需要彻底了解来龙去脉。

这正是我们使用机器学习模型的方式。非数据科学的受众通常可能不需要知道机器学习算法是如何工作的,但是我们数据科学家应该!实际上,您经常会遇到客户和利益相关者,要求您对机器学习模型如何达到最终结果进行解释。

数据科学家不能不说自己已经使用了复杂的机器学习模型集合,并且在评估指标(如ROC-AUC得分,准确性,RMSE等)方面取得了出色的表现。您的客户将无法做出该声明的开头或结尾。

在大多数数据科学项目中,我们需要建立可信赖且可解释的机器学习模型在本文中,我们将介绍各种Python库,这些库可用于部分或完全解释机器学习或深度学习模型。

用于构建可解释的机器学习模型的Python库

这是我们将在本文中讨论的6个Python库:

5级酸橙夏普黄砖阿里比清醒的

让我们开始!

1.使用ELI5解释机器学习模型

ELI5是“像我五岁的孩子一样解释”的首字母缩写。这个恰当命名的Python库具有解释大多数机器学习模型的功能。解释机器学习模型有两种主要方法:

全局解释:查看模型的参数并在全局级别确定模型的工作方式本地解释: 查看单个预测并确定导致该预测的特征

对于全局解释,ELI5具有:

eli5 。show_weights (clf )#clf 是拟合的模型

对于本地解释,ELI5具有:

eli5 。show_predictions (clf,X_train.iloc [1],feature_names = list(X.columns))

#clf是拟合的模型

#X_train.iloc [1]是索引1处的记录

#feature_names是列名称/功能的列表

如我们所见,我们仅获得训练数据中第一条记录的预测:

ELI5库的一大亮点是它已经为流行的库提供了支持,例如scikit-learn,XGBoost,Keras等。

我们也可以将ELI5用于文本数据!它有一个用于解释文本分类模型的特殊模块,称为TextExplainer。另一个亮点是格式化程序模块,我们可以在其中生成我们解释的HTML,JSON甚至Pandas数据框版本。这也使得将说明也轻松集成到我们的机器学习管道中。

2.使用LIME解释机器学习模型

考虑一下–您是否愿意从一个随机的人那里观看电影,如果有人推荐,可以观看它?无权利?您将阅读知名电影评论家对电影的评价,然后做出决定。这是因为您信任电影评论家的意见。

同样,根据LIME的作者,用于构建机器学习模型的关键字是trust。

在机器学习模型上获得最佳预测不是最终目标,不是吗?最终目标是根据这些预测做出决策,而这正是人类参与的地方。人类/决策制定者需要信任模型和预测才能做出决策-尤其是在生死攸关的情况下,关注金钱。

LIME(本地可解释模型不可知的解释)背后的思想是提供做出预测的原因。以同一示例为例,如果机器学习模型预测电影将成为大片,则LIME会突出显示电影的特征,这将使它成为超级热门。诸如流派和演员之类的功能可能有助于电影的出色表现,而诸如放映时间,导演之类的其他功能可能会不利于电影。

LIME的创建者概述了必须满足的四个基本准则:

可解释的:根据目标人群的解释必须易于理解局部保真度:解释应该能够解释模型对于单个预测的行为与模型无关:该方法应能够解释任何模型全局角度:在解释模型时应整体考虑

这些是要遵循的极好的标准,我们一般可以将它们用于机器学习模型的可解释性。

使用LIME的语法是:

进口石灰

导入lime.lime_tabular

解释器= lime.lime_tabular.LimeTabularExplainer(np.array(X_train),feature_names,

class_names,categorical_features,mode)

#np.array(X_train):训练数据

#class_names:目标变量(用于回归),目标中的不同类

变量(用于回归)

#categorical_features:列出所有分类的列名

#模式:对于回归问题:“回归”,并且

对于分类问题,“分类

上面的示例适用于表格数据(仅数字或类别)。这是显示多类分类问题的输出的方式:

对于单个预测:

exp = explorer.explain_instance(数据行,预测功能)

exp.as_pyplot_figure()#破坏解释

#data_row:我们要预测的单个测试数据点

#predict_function:预测模型

我们也可以将LIME用于图像和文本数据:

解释器 = lime_image 。LimeImageExplainer ()

# 要么

解释器 = lime_image 。LimeTextExplainer()

以下是可用于图像数据的功能列表:带LIME的图像数据使用文本数据和LIME;文本数据文档

3.使用SHAP解释机器学习模型

“ SHapley Additive exPlanations” Python库(俗称SHAP库)是用于机器学习可解释性的最受欢迎的库之一。SHAP库以Shapley值为核心,旨在解释各个预测。

但是,等等– Shapley的价值观是什么?简而言之,Shapley值是从博弈论得出的,其中我们数据中的每个特征都是一个玩家,而最终的回报就是预测。取决于奖励,Shapley值告诉我们如何在玩家之间公平分配此奖励。

SHAP最好的部分是它为基于树的模型提供了一个特殊的模块。考虑到黑客马拉松和行业中基于树的模型的流行程度,即使考虑相关功能,该模块也可以进行快速计算。

这是如何将SHAP库用于单个预测的基本语法:

进口杂货

#需要在笔记本中加载JS可视化

shap.initjs()

#假设我们正在使用XGBoost

解释器= shap.TreeExplainer(xgb_model)

shap_values = explorer.shap_values(X_train)

shap.force_plot(explainer.expected_value,shap_values [i],features = X_train.loc [i],

feature_names = X_train.columns)

#i:个人记录的ID

尽管SHAP试图解释单个预测,但我们也可以使用它来解释全局预测:

shap.summary_plot(shap_values,features,feature_names)

#features:我们的自变量训练集

#feature_names:上述训练集中的列名列表

4.使用Yellowbrick解释机器学习模型

Yellowbrick库基于scikit-learn和matplotlib库。这使其与大多数scikit-learn的模型兼容。我们甚至可以使用我们在机器学习模型中使用的相同参数(当然是基于scikit-learn)

Yellowbrick使用“可视化工具”的概念。可视化工具是一组工具,可帮助我们考虑各个数据点来可视化数据中的功能。将其视为所有功能的仪表板。Yellowbrick提供的主要展示台是:

等级特征:可视化单个特征及其与其他特征的相关性RadViz Visualizer:可视化类之间的可分离性平行坐标:可视化目标类相对于其他要素的分布PCA投影:使用主成分分析(PCA)可视化组合/更高的尺寸流形可视化:使用流形学习(如t-SNE)可视化数据直接数据可视化/联合绘图可视化器:可视化各个要素与目标变量之间的关系

使用这些可视化工具是一个非常简单的4行过程。语法类似于我们在scikit-learn中使用转换器的方式。

例如:

从 yellowbrick.features 导入 JointPlotVisualizer

visualizer = 关节图可视化器(列= [ 'col1' , 'col2' ])

可视化器。fit_transform (X , y )

可视化工具。显示()

#col1和col2是我们要探讨的2列。

#X是自变量

#y是目标变量

5.使用Alibi解释机器学习模型

Alibi是一个开放源代码Python库,它基于实例的预测解释(在这种情况下,实例表示单个数据点)。该库由不同类型的解释程序组成,具体取决于我们处理的数据类型。这是创作者自己制作的便捷表格:

如您所见,该库基于不同的技术提供了不同类型的Explainer模型。尽管我们不会详细介绍它们,但需要注意的是该库是专门为黑盒模型设计的。本质上,您只需要最后使用模型预测即可使用该库。当我们不想篡改机器学习模型的工作流程时,这特别有用。

安装Alibi会安装许多其他有用的库(作为其依赖项的一部分),例如scikit-learn,Pandas,spaCy,TensorFlow等。这将使其对于深度学习模型特别有用。

这是其中一个解释器的示例(由于我们已经在上面进行了探讨,因此请使用内核SHAP):

从alibi.explainers导入KernelShap

说明者 = KernelShap (prediction_function)

说明者。适合(X_train )

说明= explorer.explain(X_test)

#prediction_function:本predcition功能

#X_train:训练独立变量集

X_test:独立变量的测试集

6.使用Lucid解释机器学习模型

随着深度学习在整个行业中变得越来越主流,解释这些深度学习模型的需求变得迫在眉睫。但是,考虑到我们必须处理的大量功能,这可能会变得特别具有挑战性。

Lucid库旨在通过提供可视化神经网络的工具来填补这一空白。最好的部分?您无需任何预先设置即可可视化神经网络!

由一组研究人员开发并由志愿者维护,Lucid专门致力于使用神经网络和深度学习模型。它由Modelzoo组成,该组件已经预装了各种深度学习模型。

这是可视化神经元的方法(我们采用了Inceptionv1):

导入lucid.modelzoo.vision_models作为模型

从lucid.misc.io导入显示

导入lucid.optvis.objectives作为目标

将lucid.optvis.param导入为param

导入lucid.optvis.render作为渲染

导入lucid.optvis.transform作为转换

#加载模型

模型=模型.InceptionV1()

model.load_graphdef()

#可视化神经元

_ = render.render_vis(模型,层)

#layer可以是Inception模型中的任何层,例如con1d,conv2d,maxpool10等。

我们可以尝试使用不同的参数,例如使用转换后的数据,可视化特定通道的效果等。

Lucid的GitHub存储库包含易于使用的现成的Google Colab笔记本。但是,在潜水之前要注意以下几点:

到目前为止,它们仅与TensorFlow 1.0一起使用尽管笔记本全面地介绍了每个示例,但仍没有像我们上面介绍的库那样丰富的文档来源

尽管有这些限制,Lucid还是一个出色的库,适合希望详细研究神经网络的学生和研究人员。考虑到神经网络和深度学习的普及,这个空间值得一看!

尾注

在这个领域中还有许多非常好的Python库,我恳请您探索它们。随着机器学习和深度学习在该行业中变得越来越主流,对可解释性的需求也随之增加。重要的是将模型所做的预测传达给所有利益相关者,以便做出正确的决策。因此,这些工具和库是工业和研究中小时的需求。

如果您自己使用过上述工具,请在下面的评论部分中分享您的经验和反馈!返回搜狐,查看更多

责任编辑:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值