python机器学习Github已达8.9Kstars模型解释器LIME


Posted in Python onNovember 23, 2021

简单的模型例如线性回归,LR等模型非常易于解释,但在实际应用中的效果却远远低于复杂的梯度提升树模型以及神经网络等模型。

现在大部分互联网公司的建模都是基于梯度提升树或者神经网络模型等复杂模型,遗憾的是,这些模型虽然效果好,但是我们却较难对其进行很好地解释,这也是目前一直困扰着大家的一个重要问题,现在大家也越来越加关注模型的解释性。

本文介绍一种解释机器学习模型输出的方法LIME。它可以认为是SHARP的升级版,Github链接:https://github.com/marcotcr/lime,有所收获多多支持

LIME

LIME(Local Interpretable Model-agnostic Explanations)支持的模型包括:

  • 结构化模型的解释;
  • 文本分类器的解释;
  • 图像分类器的解释;

LIME被用作解释机器学习模型的解释,通过LIME我们可以知道为什么模型会这样进行预测。

本文我们就重点观测一下LIME是如何对预测结果进行解释的。

代 码

此处我们使用winequality-white数据集,并且将quality<=5设置为0,其它的值转变为1.

# !pip install lime
import pandas as pd
from xgboost import XGBClassifier
import shap
import numpy as np
from sklearn.model_selection import train_test_split
df = pd.read_csv('./data/winequality-white.csv',sep = ';')
df['quality'] = df['quality'].apply(lambda x: 0 if x <= 5 else 1)
df.head()

python机器学习Github已达8.9Kstars模型解释器LIME

# 训练集测试集分割
X = df.drop('quality', axis=1)
y = df['quality'] 
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1)
# 模型训练
model = XGBClassifier(n_estimators = 100, random_state=42)
model.fit(X_train, y_train)
score = model.score(X_test, y_test)
score

The use of label encoder in XGBClassifier is deprecated and will be removed in a future release. 0.832653061224489

对单个样本进行预测解释

下面的图中表明了单个样本的预测值中各个特征的贡献。

import lime
from lime import lime_tabular
explainer = lime_tabular.LimeTabularExplainer(
    training_data=np.array(X_train),
    feature_names=X_train.columns,
    class_names=['bad', 'good'],
    mode='classification'
)

模型有84%的置信度是坏的wine,而其中alcohol,totals ulfur dioxide是最重要的。

python机器学习Github已达8.9Kstars模型解释器LIME

import lime
from lime import lime_tabular
explainer = lime_tabular.LimeTabularExplainer(
    training_data=np.array(X_train),
    feature_names=X_train.columns,
    class_names=['bad', 'good'],
    mode='classification'
)

模型有59%的置信度是坏的wine,而其中alcohol,chlorides, density, citric acid是最重要的预测参考因素。

python机器学习Github已达8.9Kstars模型解释器LIME

exp = explainer.explain_instance(data_row=X_test.iloc[1], predict_fn=model.predict_proba)
exp.show_in_notebook(show_table=True)

适用问题

LIME可以认为是SHARP的升级版,它通过预测结果解释机器学习模型很简单。它为我们提供了一个很好的方式来向非技术人员解释地下发生了什么。您不必担心数据可视化,因为LIME库会为您处理数据可视化。

参考链接

https://www.kaggle.com/piyushagni5/white-wine-quality
LIME: How to Interpret Machine Learning Models With Python
https://github.com/marcotcr/lime
https://mp.weixin.qq.com/s/47omhEeHqJdQTtciLIN2Hw

以上就是Github已达8.9Kstars的最佳模型解释器LIME的详细内容,更多关于模型解释器LIME的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python基于multiprocessing的多进程创建方法
Jun 04 Python
django 常用orm操作详解
Sep 13 Python
Python学习pygal绘制线图代码分享
Dec 09 Python
Python cookbook(数据结构与算法)从任意长度的可迭代对象中分解元素操作示例
Feb 13 Python
Python之批量创建文件的实例讲解
May 10 Python
pygame游戏之旅 游戏中添加显示文字
Nov 20 Python
Python读取YUV文件,并显示的方法
Dec 04 Python
详解django2中关于时间处理策略
Mar 06 Python
pandas 时间格式转换的实现
Jul 06 Python
Python通过TensorFLow进行线性模型训练原理与实现方法详解
Jan 15 Python
浅谈keras中的keras.utils.to_categorical用法
Jul 02 Python
python 模拟登陆github的示例
Dec 04 Python
如何在python中实现ECDSA你知道吗
Python jiaba库的使用详解
Nov 23 #Python
python 中的jieba分词库
Nov 23 #Python
python周期任务调度工具Schedule使用详解
Nov 23 #Python
python百行代码实现汉服圈图片爬取
python可视化大屏库big_screen示例详解
python数据可视化JupyterLab实用扩展程序Mito
You might like
解析PHP实现下载文件的两种方法
2013/07/05 PHP
php引用传值实例详解学习
2013/11/06 PHP
一个报数游戏js版(约瑟夫环问题)
2010/08/05 Javascript
利用webqq协议使用python登录qq发消息源码参考
2013/04/08 Javascript
jquery $.fn $.fx是什么意思有什么用
2013/11/04 Javascript
javascript日期格式化示例分享
2014/03/05 Javascript
可恶的ie8提示缺少id未定义
2014/03/20 Javascript
jQuery实现仿新浪微博浮动的消息提示框(可智能定位)
2015/10/10 Javascript
学习jQuey中的return false
2015/12/18 Javascript
微信小程序 框架详解及实例应用
2016/09/26 Javascript
JavaScript 深层克隆对象详解及实例
2016/11/03 Javascript
JS基于面向对象实现的拖拽功能示例
2016/12/20 Javascript
jQuery实现动态生成表格并为行绑定单击变色动作的方法
2017/04/17 jQuery
微信小程序 转发功能的实现
2017/08/04 Javascript
通过V8源码看一个关于JS数组排序的诡异问题
2017/08/14 Javascript
JavaScript中利用Array filter() 方法压缩稀疏数组
2018/02/24 Javascript
详解Vue实战指南之依赖注入(provide/inject)
2018/11/13 Javascript
layui 表单标签的校验方法
2019/09/04 Javascript
解决layui的使用以及针对select、radio等表单组件不显示的问题
2019/09/05 Javascript
js实现移动端tab切换时下划线滑动效果
2019/09/08 Javascript
Python面向对象编程基础解析(一)
2017/10/26 Python
Python基于socket实现简单的即时通讯功能示例
2018/01/16 Python
Python3单行定义多个变量或赋值方法
2018/07/12 Python
python 随机打乱 图片和对应的标签方法
2018/12/14 Python
Python实现定期检查源目录与备份目录的差异并进行备份功能示例
2019/02/27 Python
Python如何在bool函数中取值
2020/09/21 Python
详解numpy1.19.4与python3.9版本冲突解决
2020/12/15 Python
合同专员岗位职责
2013/12/18 职场文书
法学个人求职信范文
2014/01/27 职场文书
小学教师听课制度
2014/02/01 职场文书
最美孝心少年事迹材料
2014/08/15 职场文书
2014广电局实施党的群众路线教育实践活动方案思想汇报
2014/09/22 职场文书
教师求职简历自我评价
2015/03/10 职场文书
2015年信息化建设工作总结
2015/07/23 职场文书
使用Python拟合函数曲线
2022/04/14 Python
浅谈音视频 pts dts基本概念及理解
2022/08/05 数码科技