aix360-gec

news2024/11/24 15:50:29

目录

  • 分组条件期望(GroupedCE)解释程序
  • 创建虚拟环境
  • 导包
  • 加载数据集
  • 训练模型
  • 计算独立条件期望ICE
    • plot_ice_explanation
  • 计算分组条件期望 (GCE)
    • plot_gce_explanation

记录一下学习过程,官方的代码在https://github.com/Trusted-AI/AIX360/tree/master/examples/gce。

分组条件期望(GroupedCE)解释程序

分组条件期望(GroupedCE)解释器是一个本地的、与模型无关的解释器,它为给定的实例和一组功能生成分组条件期望图。特征集可以是用户定义的输入协变量的子集,也可以是基于全局解释器(例如SHAP)提供的重要性的前K个特征。解释器生成三维图,包含特征对同时变化时的模型输出。如果提供了单个特征,则解释器生成标准的2D ICE图,其中一次仅扰动一个特征。

创建虚拟环境

为了避免环境污染,为aix360的实验创建一个虚拟环境。
https://blog.csdn.net/weixin_45735391/article/details/133197625

导包

import os
# to suppress unrelated tensorflow warnings while importing aix360.datasets
os.environ["TF_CPP_MIN_LOG_LEVEL"] = "3"
import numpy as np
import pandas as pd

加载数据集

数据来自这里。该数据集的标准化版本可以在 sklearn找到。如来源链接中所述,该数据集由10个基线变量组成,年龄、性别、体重指数、平均血压,为n=442名糖尿病患者中的每一位获得了6个血清测量值,以及感兴趣的反应,即基线后一年疾病进展的定量测量值。

划分训练集和测试集:

  • test_size=0.2:测试机占比20%
  • random_state=42:随机数的种子
    随机数种子:其实就是该组随机数的编号,在需要重复试验的时候,保证得到一组一样的随机数。比如你每次都填1,其他参数一样的情况下你得到的随机数组是一样的。但填0或不填,每次都会不一样。
  • return_only_numerical=True:把SEX这一列特征去掉
from aix360.datasets import DiabetesDataset

x_train, x_test, y_train, y_test, feature_names, target_names = DiabetesDataset().load_data(test_size=0.2, random_state=42, return_only_numerical=True)

刚运行就报错,确实有点烦。。。
在这里插入图片描述

根据提示找到__init__.py文件
在这里插入图片描述
运行一下diabetes_dataset.py里面的代码试试
在这里插入图片描述
没有requests模块,问题不大,pip install就好了

pip install requests

在这里插入图片描述

再次运行diabetes_dataset.py里面的代码,已经不报错了。
好像有点顺利,然后再次运行刚才的代码,还是那个错误,咦?重启一下notebook,OK了,确实有点顺利,哈哈哈。。。
它这个报错只是告诉你不能正常加载数据集,而不是直接告诉你缺少requests模块,有点坑。。。

Diabetes数据集有10个特征,前面把SEX去掉了,所以还剩下age、bmi、bp、s1、s2、s3、s4、s5、s6这九个特征。
下面是这九个特征的直方图。

import matplotlib.pyplot as plt

plt.figure(figsize = (24,20))
for i in np.arange(x_train.shape[1]):
    plt.subplot(10,5,i+1)
    plt.title(feature_names[i])
    plt.hist(x_train[:,i], 20, label = 'train',density = True,alpha = 0.5)
    plt.hist(x_test[:,i], 20, label = 'test',density = True,alpha = 0.5)
    plt.legend()
plt.tight_layout()
plt.show()

运行结果:
在这里插入图片描述

训练模型

用scikit-learn的RandomForestRegressor模型进行训练。

from sklearn.ensemble import RandomForestRegressor

clf = RandomForestRegressor().fit(x_train, y_train)
print('Score on train data :',clf.score(x_train, y_train))
print('Score on test data :',clf.score(x_test, y_test))

运行结果:

Score on train data : 0.9225497874165971
Score on test data : 0.40015247074701676

计算独立条件期望ICE

独立条件期望图(Individual Conditional Expectation Plot,ICE),描述的是每个个体的预测值与单一变量之间的关系,为每个实例显示一条曲线,显示当特征发生变化时实例的预测如何变化,可视化预测对每个实例的特征的关系。

ICE图的优点在于易于理解,能够避免数据异质的问题;缺点在于只能反映单一特征变量与目标之间的关系,受制于变量独立假设的要求,同时ICE图像往往由于个体过多导致图像看起来过于冗杂,不容易获取解释信息。

pip install shap

又报错,奇奇怪怪的毛病真多。。。
在这里插入图片描述
运行下面的命令,安装成功,重启一下notebook。

pip install --user -i https://pypi.tuna.tsinghua.edu.cn/simple shap
from aix360.algorithms.gce.gce import GroupedCEExplainer

n_test_samples = 25 # number of instances to explain
n_samples = 100 # number of samples to generate for selected feature

ice_explanations = {}
for i, feature_col in enumerate(feature_names):
    ice_explainer = GroupedCEExplainer(model=clf.predict,
                                       data=x_train, 
                                       feature_names=feature_names,
                                         n_samples=n_samples,
                                         features_selected=[feature_col],
                                        random_seed=22
                                  )
    ice_explanations[feature_col] = []
    for i in range(n_test_samples):
        ice_explanations[feature_col].append(ice_explainer.explain_instance(instance=x_test[[i], :]))

一步一个bug,刺激。。。
在这里插入图片描述
首先,在base环境下安装widgetsnbextension:

conda activate base
pip install widgetsnbextension

然后,回到运行环境,安装ipywidgets:

conda activate aix360
pip install ipywidgets

装完再重启一下notebook。
有个警告。。。
在这里插入图片描述
本来想着再找一下源码,额,还是太天真了。。。没找着tqdm在哪,,,干脆在前面加上。。。然后就没这个提示了。。。

from tqdm import tqdm

plot_ice_explanation

plots.prot_ice_explanation具有用于绘制ICE解释的辅助代码。对于不同的数据集或绘图变体,可以更新代码“plots.py”。

pip install plotly
from plots import plot_ice_explanation
plot_ice_explanation(ice_explanations, title="GroupedCE (Individual Conditional Expectation) Explanation Plot for {}-{} Test Instances.".format(0, n_test_samples-1))

运行结果:
在这里插入图片描述
根据以上ICE图,模型预测随着BMI和BP特征的增加而线性增加。

计算分组条件期望 (GCE)

初始化GroupedCEExplainer以计算每个特征的GCE分数。该解释是为单个实例计算的局部解释。结果网格中的每个单元格都解释了特征值的组合(例如BPM和BP)如何影响模型预测。

from aix360.algorithms.gce.gce import GroupedCEExplainer

n_samples = 100
top_k_features = 4

# initialization
groupedce_explainer = GroupedCEExplainer(model=clf.predict,
                                         data=x_train, 
                                         feature_names=feature_names,
                                         n_samples=n_samples,
                                         top_k_features=top_k_features,
                                        random_seed=22)

运行结果:

Considering Top 4 features according to SHAP: ['S5', 'S3', 'BP', 'BMI']
i = 0
x_instance = x_test[[i], :]
# compute explanation
groupedce_explanation = groupedce_explainer.explain_instance(instance=x_instance)

plot_gce_explanation

plots.plot_gce_explanation具有用于绘制GroupedCE(gce)解释的辅助代码。对于不同的数据集或绘图变体,可以更新代码“plots.py”。

pip install -U kaleido
from IPython.display import Image
from plots import plot_gce_explanation

title="Grouped Conditional Expectation (GCE) Plots for Test Instance {} and Selected Features {}".format(i, groupedce_explanation['selected_features'])

fig = plot_gce_explanation(groupedce_explanation, title=title)
dataset_plot_bytes = fig.to_image(format="png", width=1000, height=1000)
Image(dataset_plot_bytes)

运行结果:
在这里插入图片描述
上述GCE图显示,与BP、S3和S5相比,BMI对模型预测的影响更大。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1034632.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

High-Resolution Side Channels for Untrusted Operating Systems【ATC‘17】

目录 摘要引言贡献• 一个不受信任的操作系统的两个新的高分辨率侧通道来攻击受保护的应用程序;• 对 libjpeg 的显着改进攻击和针对 VC3 的新攻击;• 侧通道攻击对不受信任的操作系统的重要性增加。 系统模型背景Intel SGX页面错误通道时间限制空间限制…

微信小程序案例2-3:婚礼邀请函

文章目录 一、运行效果二、知识储备(一)导航栏设置1、导航栏的相关配置项2、利用导航栏组件2、在页面配置文件中对导航栏进行配置3、在全局配置文件中对导航栏进行配置 三、实现步骤 一、运行效果 “婚礼邀请函”微信小程序由4个页面组成,分别…

Springboot整合分页插件pagehelper

首先需要有一定的springbootmybatis的基础&#xff0c;才能使用顺畅 项目结构如下 引入依赖&#xff0c;springboot版本选的是2.7.16版本&#xff0c;jdk选的17&#xff0c; <!--分页插件--> <dependency><groupId>com.github.pagehelper</groupId><…

基于微信小程序的房屋租赁系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言运行环境说明用户微信小程序端的主要功能有&#xff1a;户主微信小程序端的主要功能有&#xff1a;管理员的主要功能有&#xff1a;具体实现截图详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考论文…

OceanBase 数据文件缩容实践

本文章介绍了OceanBase集群关于数据文件的缩容场景&#xff0c;并提供一种缩容方案予以参考。 作者&#xff1a;关炳文&#xff0c;爱可生 DBA 团队成员&#xff0c;负责数据库相关技术支持&#xff0c;一步两阶梯&#xff0c;兼具勤奋与慵懒。 爱可生开源社区出品&#xff0c;…

浅谈单元测试:测试和自动化中的利用

【软件测试面试突击班】如何逼自己一周刷完软件测试八股文教程&#xff0c;刷完面试就稳了&#xff0c;你也可以当高薪软件测试工程师&#xff08;自动化测试&#xff09; 浅谈单元测试是一件棘手的事情。我很确定测试人员在某个时候会抱怨开发人员没有正确地进行单元测试&…

Idea中使用Service管理微服务

前言 如何在本地一键启动很多个微服务&#xff0c;下面介绍下IDEA开发工具中得Services管理管理功能 一、第一步 1、在IDEA中下栏bar中如果存在Services,请看第二步。 2、如果没有请按照以下步骤打开 View -> Tool Windows -> Services 二、第二步 刚创建好的窗口是空…

论文浅尝 | 基于知识增强的多行为对比推荐

笔记整理&#xff1a;吴飞跃&#xff0c;东南大学硕士&#xff0c;研究方向为推荐系统 链接&#xff1a;https://doi.org/10.1145/3539597.3570386 动机 在实际推荐场景中&#xff0c;用户和物品之间存在多种类型的交互行为&#xff0c;如在线购物平台上的点击、标记为喜欢和购…

【算法专题突破】二分查找 - 704. 二分查找(16)

目录 1. 题目解析 2. 算法原理 3. 代码编写 写在最后&#xff1a; 1. 题目解析 题目链接&#xff1a;704. 二分查找 - 力扣&#xff08;LeetCode&#xff09; 题目非常简单&#xff0c;就是查找一个 target。 2. 算法原理 根据最基本的二分查找算法&#xff1a; 在一个…

Java代码随想录第一章:-数组理论基础,704. 二分查找,27. 移除元素 ,

一、数组理论基础 数组是存放在连续内存空间上的相同类型数据的集合。 数组可以方便的通过下标索引的方式获取到下标下对应的数据。 举一个字符数组的例子如图&#xff1a; 需要两点注意的是 数组下标都是从0开始的。数组内存空间的地址是连续的 正是因为数组的在内存空间…

Unity 发布WebGL平台,C#与JavaScript交互

发布H5平台&#xff0c;接入SDK&#xff0c;比如微信等&#xff0c;涉及到C#与JS的交互。 jslib&#xff08;JavaScript Library&#xff09;是Unity的一种机制&#xff0c;允许你在C#中通过JavaScript代码来执行一些操作。这是一种高级的技巧&#xff0c;主要用于一些特殊情况…

【QT】Qt的随身笔记(持续更新...)

目录 Qt 获取当前电脑桌面的路径Qt 获取当前程序运行路径Qt 创建新的文本文件txt&#xff0c;并写入内容如何向QPlainTextEdit 写入内容QTimerQMessageBox的使用QLatin1StringQLayoutC在c头文件中写#include类的头文件与直接写class加类名有何区别mutable关键字前向声明 QFontQ…

Android AMS——APP启动流程

Android 应用启动方式主要有两种 , 冷启动和热启动。 冷启动:后台没有应用进程 , 需要先创建进程 , 然后启动 Activity ;热启动:后台有应用进程 , 不创建进程 , 直接启动 Activity ; 其实,还有一种问起动的方式,就是用户按了返回键退出应用,随后又从新启动,可是活…

【Python】{已解决}在命令行窗口查看的版本号与安装版本不一致问题

今天在使用一个新的第三方库的时候&#xff1a;先pip安装了一下&#xff0c;然后导入的时候报错了 然后以为是没有安装成功&#xff0c;就又pip了一下&#xff0c;发现已经成功安装了。 那是为什么呢&#xff1f; 是解释器出现了问题吗&#xff1f;于是我就去查看了一下pychar…

反射-认识反射

一、什么是反射 二、如何使用反射 1.第一步&#xff1a;加载类&#xff0c;获取类的字节码&#xff08;获取类的Class对象&#xff09; public class reflectTest {public static void main(String[] args) throws Exception {Class c1 Student.class; //通过类名得到学生类…

上班后很迷茫,到底该如何做一个合格的测试?

【软件测试面试突击班】如何逼自己一周刷完软件测试八股文教程&#xff0c;刷完面试就稳了&#xff0c;你也可以当高薪软件测试工程师&#xff08;自动化测试&#xff09; 如何做一个合格的测试&#xff1f;软件测试工程师的岗位职责到底是什么&#xff1f; 最初&#xff0c;我…

倒计时列表实现(小程序端Vue)

//rich-text主要用来将展示html格式的&#xff0c;可以直接使用这个标签 <view class"ptBox" v-for"(item,index) in orderList" :key"index"> <rich-text :nodes"item.limit_time|limitTimeFilter"></rich-text>…

vue+three.js中使用Ammo.js

直接通过npm i ammo.js安装进webpack的项目里调用时&#xff0c;会出现如下报错&#xff1a; ERROR in ./node_modules/ammo.js/ammo.js 1:1683-1696 Mo…

VMware中安装Ubuntu(2023年)

Ubuntu安装 前言 安装过程中电脑发热时正常的&#xff0c;这个还是稍微有点点大&#xff1b;下载的版本根据自己的喜好来&#xff0c;新版本肯定要比旧版本占用的空间更大&#xff0c;大家自行选择&#xff1b;仅供学习使用的话可以下载成熟稳定的版本&#xff0c;例如16、18…

【新版】系统架构设计师 - 案例分析 - 架构设计<SOA与微服务>

个人总结&#xff0c;仅供参考&#xff0c;欢迎加好友一起讨论 文章目录 架构 - 案例分析 - 架构设计&#xff1c;SOA与微服务&#xff1e;例题1例题2例题3例题4 架构 - 案例分析 - 架构设计&#xff1c;SOA与微服务&#xff1e; 这里SOA与微服务的例题只对应找寻了几个&#x…