百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

增强ML模型的可解释性,让这4个库大显身手吧

toyiye 2024-07-06 00:17 10 浏览 0 评论

全文共4242字,预计学习时长8分钟


随着人们对人工智能的偏见越来越明显,企业需要对模型做出的预测与模型本身做出解释——这一点越来越重要。幸运的是,越来越多的Python库正得以开发出来解决这一问题。接下来,本文将简要介绍四个用于解读与解释机器学习模型的python软件包。

这四个库都是pip可安装的,具有良好的文件编制,强调可视化解读。


1. yellowbrick

传送门:https://www.scikit-yb.org/en/latest/quickstart.html


这个库本质上是scikit-learn学习库的扩展,并为机器学习模型提供了一些极其有用且好看的可视化。可视化工具对象、核心接口都是scikit-learn模拟估算器。如果你习惯于使用scikit-learn学习库,那么就一定不会对yellowbrick的工作流程感到陌生。

获得的可视化包括模型选择、特征重要性与模型性能分析。


下面来举几个简单的例子。


库可以通过pip安装。

pip install yellowbrick


为说明一些特性,我们将使用一个被称为葡萄酒识别集的scikit-learn数据集。


传送门:https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_wine.html#sklearn.datasets.load_wine


这个数据集有13个特性和3个目标类,可直接从scikit-learn学习库加载。在下方代码中,我们导入数据集并将其转化为数据帧。数据可以直接在分类器中使用,不需要任何额外预处理。

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


我们还使用scikit-learn进一步将数据集拆分为测试集与训练集。

from sklearn.model_selection import train_test_split
X = df_wine.drop(['target'], axis=1)
y = df_wine['target']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)


接下来,使用Yellowbricks可视化工具观察数据集中各特性的相关性。

from yellowbrick.features import Rank2D
import matplotlib.pyplot as plt
visualizer = Rank2D(algorithm="pearson", size=(1080, 720))
visualizer.fit_transform(X_train)
visualizer.poof()


现在安装一个随机森林分类器,并使用另一可视化工具评估其性能。

from yellowbrick.classifier import ClassificationReport
from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier()
visualizer = ClassificationReport(model, size=(1080, 720))
visualizer.fit(X_train, y_train)
visualizer.score(X_test, y_test)
visualizer.poof()


2. ELI5

传送门:https://eli5.readthedocs.io/en/latest/

ELI5是另一个可视化库,可用于调试机器学习模型并解释模型所做出的预测。它可用于最常见的 Python机器学习库,如scikit-learn、 XGBoost 和 Keras。


下面使用ELI5检查上方训练后模型的特征重要性。

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



默认情况下,show_weights方法使用gain计算权重,但也可通过添加importance_type argument 指定其他类型。


也可以用show_prediction检查单独预测的原因。

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


3. LIME

传送门:https://github.com/marcotcr/lime


LIME(局部可解释模型-不可知论解释)是一个用于解释机器学习算法所做出的预测的软件包。Lime支持各种分类器对单个预测的解释,并内置支持scikit-learn。


下面使用Line解释一些上方已训练模型所做出的预测。


Lime可以通过pip安装。

pip install lime


首先,建立一个解释器。这将训练数据集看做一个数组,包含模型中使用的特性的名称,和目标变量中类的名称。

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


接下来,创建一个lambda函数,该函数使用模型对数据样本进行预测,这借鉴于Lime上一个优秀且更加深入的教程(https://www.guru99.com/scikit-learn-tutorial.html)。

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


接下来,使用解释器解释所选取示例的预测,结果如下所示。Lime生成可视化,显示这些特性导致这一特定预测结果的过程。

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


4. MLxtend

传送门:http://rasbt.github.io/mlxtend/


该库包含很多用于机器学习的辅助函数。这其中包括stacking 和投票分类器、 模型评估、特征提取、编程和制图。


使用MLxtend将voting 分类器的决策边界与其组成分类器进行比较。


同样,MLxtend也能通过pip安装。

pip install mlxtend


输入内容如下所示。

from mlxtend.plotting import plot_decision_regions
from mlxtend.classifier import EnsembleVoteClassifier
import matplotlib.gridspec as gridspec
import itertools
from sklearn import model_selection
from sklearn.linear_model import LogisticRegression
from sklearn.naive_bayes import GaussianNB
from sklearn.ensemble import RandomForestClassifier


以下可视化只能一次处理两个特性,因此首先创建一个包含proline 和color_intensity的数组。笔者之所以选择这两个特性,是因为它们在之前使用ELI5观察的特性中具有最高的权重。

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


接下来,创建分类器,将它们与训练数据相匹配,并使用MLxtend对决策边界进行可视化。代码下方为输出结果。

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



除了本文介绍的这些之外,还有篇极好的文章中包含很多有用的库,可供你尝试:https://skymind.ai/wiki/python-ai


留言 点赞 关注

我们一起分享AI学习与发展的干货

编译组:段昌蓉、梁晶晶

相关链接:

https://towardsdatascience.com/python-libraries-for-interpretable-machine-learning-c476a08ed2c7

如需转载,请后台留言,遵守转载规范

相关推荐

如何用 coco 数据集训练 Detectron2 模型?

随着最新的Pythorc1.3版本的发布,下一代完全重写了它以前的目标检测框架,新的目标检测框架被称为Detectron2。本教程将通过使用自定义coco数据集训练实例分割模型,帮助你开始使...

CICD联动阿里云容器服务Kubernetes实践之Bamboo篇

本文档以构建一个Java软件项目并部署到阿里云容器服务的Kubernetes集群为例说明如何使用Bamboo在阿里云Kubernetes服务上运行RemoteAgents并在agents上...

Open3D-ML点云语义分割实验【RandLA-Net】

作为点云Open3D-ML实验的一部分,我撰写了文章解释如何使用Tensorflow和PyTorch支持安装此库。为了测试安装,我解释了如何运行一个简单的Python脚本来可视化名为...

清理系统不用第三方工具(系统自带清理软件效果好不?)

清理优化系统一定要借助于优化工具吗?其实,手动优化系统也没有那么神秘,掌握了方法和技巧,系统清理也是一件简单和随心的事。一方面要为每一个可能产生累赘的文件找到清理的方法,另一方面要寻找能够提高工作效率...

【信创】联想开先终端开机不显示grub界面的修改方法

原文链接:【信创】联想开先终端开机不显示grub界面的修改方法...

如意玲珑成熟度再提升,三大发行版支持教程来啦!

前期,我们已分别发布如意玲珑在deepinV23与UOSV20、openEuler24.03发行版的操作指南,本文,我们将为大家详细介绍Ubuntu24.04、Debian12、op...

118种常见的多媒体文件格式(英文简写)

MP4[?mpi?f??]-MPEG-4Part14(MPEG-4第14部分)AVI[e?vi??a?]-AudioVideoInterleave(音视频交错)MOV[m...

密码丢了急上火?码住7种console密码紧急恢复方式!

身为攻城狮的你,...

CSGO丨CS2的cfg指令代码分享(csgo自己的cfg在哪里?config文件位置在哪?)

?...

使用open SSL生成局域网IP地址证书

某些特殊情况下,用户内网访问多可文档管理系统时需要启用SSL传输加密功能,但只有IP,没有域名和证书。这种情况下多可提供了一种免费可行的方式,通过openSSL生成免费证书。此方法生成证书浏览器会提示...

Python中加载配置文件(python怎么加载程序包)

我们在做开发的时候经常要使用配置文件,那么配置文件的加载就需要我们提前考虑,再不使用任何框架的情况下,我们通常会有两种解决办法:完整加载将所有配置信息一次性写入单一配置文件.部分加载将常用配置信息写...

python开发项目,不得不了解的.cfg配置文件

安装软件时,经常会见到后缀为.cfg、.ini的文件,一般我们不用管,只要不删就行。因为这些是程序安装、运行时需要用到的配置文件。但对开发者来说,这种文件是怎么回事就必须搞清了。本文从.cfg文件的创...

瑞芯微RK3568鸿蒙开发板OpenHarmony系统修改cfg文件权限方法

本文适用OpenHarmony开源鸿蒙系统,本次使用的是开源鸿蒙主板,搭载瑞芯微RK3568芯片。深圳触觉智能专注研发生产OpenHarmony开源鸿蒙硬件,包括核心板、开发板、嵌入式主板,工控整机等...

Python9:图像风格迁移-使用阿里的接口

先不多说,直接上结果图。#!/usr/bin/envpython#coding=utf-8importosfromaliyunsdkcore.clientimportAcsClient...

Python带你打造个性化的图片文字识别

我们的目标:从CSV文件读取用户的文件信息,并将文件名称修改为姓名格式的中文名称,进行规范资料整理,从而实现快速对多个文件进行重命名。最终效果:将原来无规律的文件名重命名为以姓名为名称的文件。技术点:...

取消回复欢迎 发表评论:

请填写验证码