当前位置: 首页 > news >正文

lime使用记录

主要是对预测结果进行可解释

import numpy as np
import pandas as pd
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report
from lime import lime_tabular# 加载数据集
iris = load_iris()
X = iris.data
y = iris.target# 特征名称
feature_names = iris.feature_names
class_names = iris.target_names# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 训练随机森林分类器
rf_clf = RandomForestClassifier(n_estimators=500)
rf_clf.fit(X_train, y_train)# 在测试集上进行预测
y_pred = rf_clf.predict(X_test)# 打印分类报告
print(classification_report(y_test, y_pred, target_names=class_names))# 初始化LIME解释器
explainer = lime_tabular.LimeTabularExplainer(training_data=np.array(X_train),feature_names=feature_names,class_names=class_names,mode='classification'
)
# 打印解释结果
print("预测类别: {}".format(class_names[y_pred[i]]))i = 10  # 可以选择任意一个测试样本的索引# 选择一个测试样本进行解释
for idx, class_name in enumerate(class_names): exp = explainer.explain_instance(X_test[i], rf_clf.predict_proba, num_samples=500,num_features=400,top_labels=None,labels=[idx])#画图exp.show_in_notebook(show_table=True)# 获取解释图exp.as_pyplot_figure(label=idx)# 打印解释print(exp.as_list(label=idx))

下面是对 LimeTabularExplainer 初始化参数的详细解释:

explainer = lime_tabular.LimeTabularExplainer(training_data=np.array(X_train),feature_names=feature_names,class_names=class_names,mode='classification',discretize_continuous=True,discretizer='quartile',categorical_features=(),categorical_names={},kernel_width=None,kernel=None,verbose=False,random_state=None
)

以下是每个参数的详细说明:

  • training_data: 训练数据集,类型为NumPy数组。这是LIME解释器用来学习如何解释模型的本地代理的数据集。

  • feature_names: 一个列表,包含了数据集中所有特征的名称。这用于在解释时标识特征。

  • class_names: 一个列表,包含了所有类别的名称。这用于在分类任务中标识类别。

  • mode: 解释器的工作模式。可以是 'classification' 或 'regression',分别对应分类和回归任务。

  • discretize_continuous: 布尔值,表示是否将连续特征离散化。在许多情况下,为了更好地解释模型,连续特征会被转换为分类特征。

  • discretizer: 当 discretize_continuous 为 True 时,此参数指定用于离散化连续特征的策略。默认是 'quartile',表示使用四分位数来离散化。

  • categorical_features: 一个元组或列表,包含数据集中所有分类特征的索引。这告诉解释器哪些特征是分类的。

  • categorical_names: 一个字典,其中键是分类特征的索引,值是分类特征的可能值的列表。这用于在解释时标识分类特征的值。

  • kernel_width: 解释器使用的核函数的宽度。较大的值意味着解释将考虑更多的数据点,而较小的值则意味着只考虑更接近查询点的数据点。

  • kernel: 指定用于权重分配的核函数。默认情况下,LIME使用高斯核。

  • verbose: 布尔值,表示是否打印出中间过程的详细信息。

  • random_state: 控制随机过程的种子,用于重现性。


以下是 explain_instance 方法的详细解释,包括其参数和返回值:

exp = explainer.explain_instance(data_row,predict_fn,num_features=10,top_labels=None,num_samples=5000,distance_metric='euclidean',model_regressor=None,categorical_feature_mask=None,feature_selection='auto',random_state=None
)

以下是每个参数的详细说明:

  • data_row: 需要解释的数据实例。它应该是一个与训练数据具有相同特征和格式的NumPy数组或列表。

  • predict_fn: 一个函数,它接收与训练数据格式相同的NumPy数组,并返回预测概率或预测值。对于分类问题,返回的通常是每个类别的概率;对于回归问题,返回的是预测值。

  • num_features: 需要解释的特征数量。这个方法将生成一个解释,其中包含对预测影响最大的 num_features 个特征。

  • top_labels: 对于分类问题,这是要解释的顶部标签的数量。默认情况下,只解释预测概率最高的标签。如果你设置为 None,则解释所有标签。

  • num_samples: 解释单个实例时使用的样本数量。LIME通过在 data_row 周围采样并观察模型预测的变化来生成解释。较大的 num_samples 会提供更准确的解释,但计算成本更高。

  • distance_metric: 用于测量采样点与 data_row 之间距离的距离度量。默认是欧几里得距离(‘euclidean’),但也可以选择其他度量,如曼哈顿距离(‘manhattan’)。

  • model_regressor: 用于拟合采样数据的回归模型。默认情况下,LIME会根据数据类型自动选择一个模型。如果你有特定的回归模型,可以在这里指定。

  • categorical_feature_mask: 一个布尔数组,指示哪些特征是分类的。如果提供了,它将覆盖 explainer 初始化时提供的 categorical_features

  • feature_selection: 特征选择的策略。可以是 'auto''forward_selection''lasso_path' 或 'none'。默认是 'auto',它根据数据类型和大小自动选择最佳策略。

  • random_state: 控制随机过程的种子,用于重现性。

返回值 exp 是一个 Explanation 对象,它包含了以下方法来获取和可视化解释:

  • as_list(): 返回一个包含特征及其影响的列表。
  • as_map(): 返回一个字典,其中键是特征名称,值是它们对预测的影响。
  • show_in_notebook(): 在Jupyter笔记本中可视化解释。
  • save_to_file(file_name, format='html'): 将解释保存到文件中,支持的格式包括HTML和PNG。

相关文章:

  • Nginx配置及部署前端项目,安排!
  • Rce脚本自动化amp;批量
  • TDengine 签约青山钢铁,实现冶金全流程质量管控智能化
  • vue.js 原生js app端实现图片旋转、放大、缩小、拖拽
  • 服务器的地址如何伪装起来
  • PWM基础与信号控制
  • python 图像绘制问题: 使用turtle库绘制蟒蛇
  • RAG+Agent人工智能平台:RAGflow实现GraphRA知识库问答,打造极致多模态问答与AI编排流体验
  • 【Vue.js基础】
  • Maven笔记(一):基础使用【记录】
  • pyproject.toml文件相关
  • 【第二轮通知】第二届网络、通信与智能计算国际会议(NCIC 2024)
  • 三维扫描 | 解锁低成本、高效率的工作秘籍
  • 2024.9.26 作业 +思维导图
  • 【DP解密多重背包问题】:优化策略与实现
  • 10个最佳ES6特性 ES7与ES8的特性
  • C# 免费离线人脸识别 2.0 Demo
  • Java|序列化异常StreamCorruptedException的解决方法
  • java取消线程实例
  • KMP算法及优化
  • python_bomb----数据类型总结
  • Service Worker
  • vue--为什么data属性必须是一个函数
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 从0到1:PostCSS 插件开发最佳实践
  • 从零搭建Koa2 Server
  • 分布式事物理论与实践
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 深入浅出webpack学习(1)--核心概念
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • 系统认识JavaScript正则表达式
  • 异步
  • 因为阿里,他们成了“杭漂”
  • 1.Ext JS 建立web开发工程
  • ​VRRP 虚拟路由冗余协议(华为)
  • # 消息中间件 RocketMQ 高级功能和源码分析(七)
  • #1015 : KMP算法
  • #Datawhale AI夏令营第4期#AIGC方向 文生图 Task2
  • #FPGA(基础知识)
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • (175)FPGA门控时钟技术
  • (Java数据结构)ArrayList
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (精确度,召回率,真阳性,假阳性)ACC、敏感性、特异性等 ROC指标
  • (十六)一篇文章学会Java的常用API
  • (十三)Flink SQL
  • (一) storm的集群安装与配置
  • (一)Kafka 安全之使用 SASL 进行身份验证 —— JAAS 配置、SASL 配置
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • (转)http-server应用
  • (转)JAVA中的堆栈