SHAP(五):使用 XGBoost 进行人口普查收入分类

SHAP(五):使用 XGBoost 进行人口普查收入分类

本笔记本演示了如何使用 XGBoost 预测个人年收入超过 5 万美元的概率。 它使用标准 UCI 成人收入数据集。 要下载此笔记本的副本,请访问 github。

XGBoost 等梯度增强机方法对于具有多种形式的表格样式输入数据的此类预测问题来说是最先进的。 Tree SHAP(arXiv 论文)允许精确计算树集成方法的 SHAP 值,并已直接集成到 C++ XGBoost 代码库中。 这允许快速精确计算 SHAP 值,无需采样,也无需提供背景数据集(因为背景是从树木的覆盖范围推断出来的)。

在这里,我们演示如何使用 SHAP 值来理解 XGBoost 模型预测。

import matplotlib.pylab as pl
import numpy as np
import xgboost
from sklearn.model_selection import train_test_splitimport shap# print the JS visualization code to the notebook
shap.initjs()

1.加载数据集

X, y = shap.datasets.adult()
X_display, y_display = shap.datasets.adult(display=True)# create a train/test split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=7)
d_train = xgboost.DMatrix(X_train, label=y_train)
d_test = xgboost.DMatrix(X_test, label=y_test)

2.训练模型

params = {"eta": 0.01,"objective": "binary:logistic","subsample": 0.5,"base_score": np.mean(y_train),"eval_metric": "logloss",
}
model = xgboost.train(params,d_train,5000,evals=[(d_test, "test")],verbose_eval=100,early_stopping_rounds=20,
)
[0]	test-logloss:0.54663
[100]	test-logloss:0.36373
[200]	test-logloss:0.31793
[300]	test-logloss:0.30061
[400]	test-logloss:0.29207
[500]	test-logloss:0.28678
[600]	test-logloss:0.28381
[700]	test-logloss:0.28181
[800]	test-logloss:0.28064
[900]	test-logloss:0.27992
[1000]	test-logloss:0.27928
[1019]	test-logloss:0.27935

3.经典特征归因

在这里,我们尝试 XGBoost 附带的全局特征重要性计算。 请注意,它们都是相互矛盾的,这激励了 SHAP 值的使用,因为它们具有一致性保证(意味着它们将正确排序特征)。

xgboost.plot_importance(model)
pl.title("xgboost.plot_importance(model)")
pl.show()


在这里插入图片描述

xgboost.plot_importance(model, importance_type="cover")
pl.title('xgboost.plot_importance(model, importance_type="cover")')
pl.show()


在这里插入图片描述

xgboost.plot_importance(model, importance_type="gain")
pl.title('xgboost.plot_importance(model, importance_type="gain")')
pl.show()


在这里插入图片描述

4,解释预测

在这里,我们使用集成到 XGBoost 中的 Tree SHAP 实现来解释整个数据集(32561 个样本)。

# this takes a minute or two since we are explaining over 30 thousand samples in a model with over a thousand trees
explainer = shap.TreeExplainer(model)
shap_values = explainer.shap_values(X)

4.1 可视化单个预测

请注意,我们使用“显示值”数据框,因此我们得到了漂亮的字符串而不是类别代码。

shap.force_plot(explainer.expected_value, shap_values[0, :], X_display.iloc[0, :])

在这里插入图片描述

4.2 将许多预测可视化

为了让浏览器满意,我们只可视化 1,000 个人。

shap.force_plot(explainer.expected_value, shap_values[:1000, :], X_display.iloc[:1000, :]
)

在这里插入图片描述

5.平均重要性条形图

这取整个数据集中 SHAP 值大小的平均值,并将其绘制为简单的条形图。

shap.summary_plot(shap_values, X_display, plot_type="bar")


在这里插入图片描述

6.SHAP 概要图

我们没有使用典型的特征重要性条形图,而是使用每个特征的 SHAP 值的密度散点图来确定每个特征对验证数据集中个体的模型输出有多大影响。 特征按所有样本的 SHAP 值大小之和排序。 有趣的是,关系特征比资本收益特征具有更大的总体模型影响,但对于那些资本收益重要的样本,它比年龄具有更大的影响。 换句话说,资本收益对少数预测的影响较大,而年龄对所有预测的影响较小。

请注意,当散点不适合在线时,它们会堆积起来以显示密度,每个点的颜色代表该个体的特征值。

shap.summary_plot(shap_values, X)


在这里插入图片描述

7.SHAP 相关图

SHAP 依赖图显示单个特征对整个数据集的影响。 他们绘制了多个样本中某个特征的值与该特征的 SHA 值的关系图。 SHAP 依赖图与部分依赖图类似,但考虑了特征中存在的交互效应,并且仅在数据支持的输入空间区域中定义。 单个特征值处的 SHAP 值的垂直分散是由交互效应驱动的,并且选择另一个特征进行着色以突出可能的交互。

for name in X_train.columns:shap.dependence_plot(name, shap_values, X, display_features=X_display)


在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

8.简单的监督聚类

按 shap_values 对人们进行聚类会导致与手头的预测任务相关的组(在本例中是他们的收入潜力)。

from sklearn.decomposition import PCA
from sklearn.manifold import TSNEshap_pca50 = PCA(n_components=12).fit_transform(shap_values[:1000, :])
shap_embedded = TSNE(n_components=2, perplexity=50).fit_transform(shap_values[:1000, :])
from matplotlib.colors import LinearSegmentedColormapcdict1 = {"red": ((0.0, 0.11764705882352941, 0.11764705882352941),(1.0, 0.9607843137254902, 0.9607843137254902),),"green": ((0.0, 0.5333333333333333, 0.5333333333333333),(1.0, 0.15294117647058825, 0.15294117647058825),),"blue": ((0.0, 0.8980392156862745, 0.8980392156862745),(1.0, 0.3411764705882353, 0.3411764705882353),),"alpha": ((0.0, 1, 1), (0.5, 1, 1), (1.0, 1, 1)),
}  # #1E88E5 -> #ff0052
red_blue_solid = LinearSegmentedColormap("RedBlue", cdict1)
f = pl.figure(figsize=(5, 5))
pl.scatter(shap_embedded[:, 0],shap_embedded[:, 1],c=shap_values[:1000, :].sum(1).astype(np.float64),linewidth=0,alpha=1.0,cmap=red_blue_solid,
)
cb = pl.colorbar(label="Log odds of making > $50K", aspect=40, orientation="horizontal")
cb.set_alpha(1)
cb.outline.set_linewidth(0)
cb.ax.tick_params("x", length=0)
cb.ax.xaxis.set_label_position("top")
pl.gca().axis("off")
pl.show()


在这里插入图片描述

for feature in ["Relationship", "Capital Gain", "Capital Loss"]:f = pl.figure(figsize=(5, 5))pl.scatter(shap_embedded[:, 0],shap_embedded[:, 1],c=X[feature].values[:1000].astype(np.float64),linewidth=0,alpha=1.0,cmap=red_blue_solid,)cb = pl.colorbar(label=feature, aspect=40, orientation="horizontal")cb.set_alpha(1)cb.outline.set_linewidth(0)cb.ax.tick_params("x", length=0)cb.ax.xaxis.set_label_position("top")pl.gca().axis("off")pl.show()


在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

训练每棵树只有两个叶子的模型,因此特征之间没有交互项

强制模型没有交互项意味着某个特征对结果的影响不依赖于任何其他特征的值。 这反映在下面的 SHAP 相关图中,因为没有垂直扩展。 垂直分布反映了一个特征的单个值可能对模型输出产生不同的影响,具体取决于个体呈现的其他特征的上下文。 然而,对于没有交互项的模型,无论个体可能具有哪些其他属性,特征总是具有相同的影响。

与传统的部分相关图相比,SHAP 相关图的优点之一是能够区分具有交互项和不具有交互项的模型。 换句话说,SHAP 相关图通过给定特征值处散点图的垂直方差给出了交互项大小的概念。

# train final model on the full data set
params = {"eta": 0.05,"max_depth": 1,"objective": "binary:logistic","subsample": 0.5,"base_score": np.mean(y_train),"eval_metric": "logloss",
}
model_ind = xgboost.train(params,d_train,5000,evals=[(d_test, "test")],verbose_eval=100,early_stopping_rounds=20,
)
[0]	test-logloss:0.54113
[100]	test-logloss:0.35499
[200]	test-logloss:0.32848
[300]	test-logloss:0.31901
[400]	test-logloss:0.31331
[500]	test-logloss:0.30930
[600]	test-logloss:0.30619
[700]	test-logloss:0.30371
[800]	test-logloss:0.30184
[900]	test-logloss:0.30035
[1000]	test-logloss:0.29913
[1100]	test-logloss:0.29796
[1200]	test-logloss:0.29695
[1300]	test-logloss:0.29606
[1400]	test-logloss:0.29525
[1500]	test-logloss:0.29471
[1565]	test-logloss:0.29439
shap_values_ind = shap.TreeExplainer(model_ind).shap_values(X)

请注意,下面的交互颜色条对于该模型来说没有意义,因为它没有交互。

for name in X_train.columns:shap.dependence_plot(name, shap_values_ind, X, display_features=X_display)
invalid value encountered in divide
invalid value encountered in divide

在这里插入图片描述

invalid value encountered in divide
invalid value encountered in divide

在这里插入图片描述

invalid value encountered in divide
invalid value encountered in divide

在这里插入图片描述

invalid value encountered in divide
invalid value encountered in divide

在这里插入图片描述

invalid value encountered in divide
invalid value encountered in divide

在这里插入图片描述

invalid value encountered in divide
invalid value encountered in divide

在这里插入图片描述

invalid value encountered in divide
invalid value encountered in divide

在这里插入图片描述

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

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

相关文章

最小生成树算法

文章目录 最小生成树概述 P r i m Prim Prim 算法 - 稠密图 - O ( n 2 ) O(n^2) O(n2)思路概述时间复杂度分析AcWing 858. Prim算法求最小生成树CODE K r u s k a l Kruskal Kruskal 算法 - 稀疏图 - O ( m l o g m ) O(mlogm) O(mlogm)思路解析时间复杂度分析AcWing 859. Kr…

管理类联考-性质

性质 ——性质—— 一、是什么 (1)本质:判断一定范围内的对象是否具备某个性质的命题就是性质命题(直言命题)。直言命题是断定事物/对象是否具有某种性质的命题。直言命题在结构上由主项、谓项、联项和量项组成。 &am…

制作一个RISC-V的操作系统一-计算机系统漫游

文章目录 计算机的硬件组成两种架构程序的存储与执行程序语言的设计和进化一个mini计算机 编程语言的进化存储设备的层次结构操作系统 计算机的硬件组成 所有硬件由总线连接起来 两种架构 总线个数不同,Memory储存内容不同 程序的存储与执行 首先编译和链接某…

【STM32】STM32学习笔记-课程简介(1)

00. 目录 文章目录 00. 目录01. 课程简介02. 硬件设备03. 软件工具04. 硬件套件4.1 面包板和跳线/飞线4.2 杜邦线和STM32最小系统板4.3 STLINK和OLED显示屏4.4 LED和按键4.5 电位器和蜂鸣器4.6 传感器和旋转编码器4.7 USB转串口和MPU60504.8 Flash闪存和电机模块4.9 SG90舵机 0…

Wireshark使用详解

wireshark简介 wireshark是捕获机器上的某一块网卡的网络包,当你的机器上有多块网卡的时候,你需要选择一个网卡。   wireshark能获取HTTP,也能获取HTTPS,但是不能解密HTTPS,所以wireshark看不懂HTTPS中的内容&#…

【送书活动三期】解决docker服务假死问题

工作中使用docker-compose部署容器,有时候会出现使用docker-compose stop或docker-compose down命令想停掉容器,但是依然无法停止或者一直卡顿在停止中的阶段,这种问题很让人头疼啊! 目录 问题描述问题排查问题解决终极杀招-最粗暴…

解决了布局问题1和布局问题2,接下来,你的Main函数如果写成下面这样,直接运行,什么也不会显示?

> if __name____main__:app QApplication(sys.argv)MainWindow QMainWindow()ui Ui_MainWindow()ui.setupUi(MainWindow)MainWindow.show()app.exec()什么也不会显示 如果你不想修改main中的内容,必须在class Ui_MainWindow(QWidget) 类中添加一个初始化方法…

【开源存储】glusterfs分布式文件系统部署实践

文章目录 一、前言1、介绍说明2、术语说明3、冗余模式3.1、复制卷(Replication)3.2、纠删卷(Erasure Code) 二、部署说明1、软件安装2、集群部署2.1、前置准备2.2、部署过程a、添加节点b、配置存储c、创建glusterfs卷d、客户端挂载…

ffmpeg 任意文件读取漏洞/SSRF漏洞 (CVE-2016-1897/CVE-2016-1898)

漏洞描述 影响范围 FFmpeg 2.8.x < 2.8.5FFmpeg 2.7.x < 2.7.5FFmpeg 2.6.x < 2.6.7FFmpeg 2.5.x < 2.5.10 漏洞环境及利用 搭建docker环境 访问8080端口看到上传界面 由于vulhub并没有讲述该漏洞如何复现&#xff0c;我们需要进入环境查看源码 <?php if(!…

C语言——I /深入理解指针(二)

一、数组名的理解 int arr[10] {1,2,3,4,5,6,7,8,9,10}; int *p &arr[0];这⾥我们使⽤ &arr[0] 的⽅式拿到了数组第⼀个元素的地址&#xff0c;但是其实数组名本来就是地址&#xff0c;⽽且 是数组⾸元素的地址&#xff0c;我们来做个测试。 #include <stdio.…

高端大气简历模板(精选8篇)

想要让简历在众多求职者中脱颖而出&#xff0c;吸引HR的眼球吗&#xff0c;可以看看这8篇精选的高端大气简历模板&#xff01;本文为大家提供了多种行业、职位的简历案例&#xff0c;助大家打造一份令人惊艳的简历&#xff0c;轻松斩获心仪职位&#xff01; 高端大气简历模板下…

spring boot定时器实现定时同步数据

文章目录 目录 文章目录 前言 一、依赖和目录结构 二、使用步骤 2.1 两个数据源的不同引用配置 2.2 对应的mapper 2.3 定时任务处理 总结 前言 一、依赖和目录结构 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifa…

【ArcGIS Pro微课1000例】0040:ArcGIS Pro创建北极点、南极点

文章目录 一、创建北极点图层二、创建北极点三、不同投影系下北极点的位置一、创建北极点图层 选择一个数据库,在上面右键→新建→要素类。 输入名称:北极点。 空间参考:WGS 1984 点击创建。 二、创建北极点 在编辑选项卡下,点击【创建】。 在创建要素窗口中,点击北极点…

Python 爬虫 之scrapy 框架

文章目录 常用的命令开始爬虫请求与响应让控制台只输出想要的信息创建一个py 文件来帮忙运行爬虫 工作原理图实战 常用的命令 Scrapy是一个用于爬取网站数据的Python框架&#xff0c;以下是一些常用的Scrapy命令&#xff1a; 开始的时候 用 cd 进入你想创建scrapy 的文件夹 &a…

第十一届蓝桥杯青少组省赛Python中高级组真题及赏析

练习最好的办法就是实战。拿真题来做&#xff0c;不是解析是赏析。带着欣赏的眼光看&#xff0c;题目不但不难&#xff0c;反倒增加不少乐趣。接下来揭开第十一届蓝桥杯青少组省赛python编程题的神秘面纱&#xff0c;我们来一一赏析&#xff0c;看难不难。 选择题 选择题都比较…

Python遥感开发之批量拼接

Python遥感开发之批量拼接 1 遥感图像无交错的批量拼接2 遥感图像有交错的批量拼接 前言&#xff1a;主要借助python实现遥感影像的批量拼接&#xff0c;遥感影像的批量拼接主要分为两种情况&#xff0c;一种是遥感图像无交错&#xff0c;另一种情况是遥感图像相互有交错。具体…

2023-12-01 LeetCode每日一题(找出叠涂元素)

2023-12-01每日一题 一、题目编号 2661. 找出叠涂元素二、题目链接 点击跳转到题目位置 三、题目描述 给你一个下标从 0 开始的整数数组 arr 和一个 m x n 的整数 矩阵 mat 。arr 和 mat 都包含范围 [1&#xff0c;m * n] 内的 所有 整数。 从下标 0 开始遍历 arr 中的每…

FL Studio21.2汉化永久中文语言包

FL Studio21.2这款软件在国内被广泛使用&#xff0c;因此又被称为"水果"。它提供音符编辑器&#xff0c;可以针对作曲者的要求编辑出不同音律的节奏&#xff0c;例如鼓、镲、锣、钢琴、笛、大提琴、筝、扬琴等等任何乐器的节奏律动。此外&#xff0c;它还提供了方便快…

《opencv实用探索·八》图像模糊之均值滤波简单理解

1、前言 什么是噪声&#xff1f; 该像素与周围像素的差别非常大&#xff0c;导致从视觉上就能看出该像素无法与周围像素组成可识别的图像信息&#xff0c;降低了整个图像的质量。这种“格格不入”的像素就被称为图像的噪声。如果图像中的噪声都是随机的纯黑像素或者纯白像素&am…

Oracle(2-7)Instance and Media Recovery Structures

文章目录 一、基础知识1、体系结构详解2、Database Files 数据库文件3、Database Other Files 其他数据文件4、Dynamic Views 动态视图5、Large Pool6、DB Buffer Cache,DBWn7、Configuring Tablespaces 配置表空间8、Redo Log Buffer, LGWR9、Database Checkpoints 数据库检查…