分类特征的 SHAP

将经过One-Hot 编码转换的分类特征的 SHAP 值相加

可直接在橱窗里购买,或者到文末领取优惠后购买:

img

分类特征需要先进行转换,然后才能用于模型。One-Hot 编码是一种常见的方法:我们最终会得到每个类别的二进制变量。这很好,直到理解使用 SHAP 的模型为止。每个二进制变量都有自己的 SHAP 值。这使得很难理解原始分类特征的整体贡献。

一种简单的方法是将每个二进制变量的 SHAP 值加在一起。这可以解释为原始分类特征的 SHAP 值。我们将向你介绍执行此操作的 Python 代码。我们将看到我们能够使用 SHAP 聚合图。但是,在理解分类特征关系的性质时,这些是有限的。所以,最后我们向你展示如何使用箱线图来可视化 SHAP 值。

如果你不熟悉 SHAP 或 Python 包,我建议你阅读一下之前的这篇文章《[[Python 中的 SHAP 简介]]》。我们将深入探讨如何解释 SHAP 值。我们还探讨了本文中使用的一些聚合。

处理分类变量时还有另一种解决方案。那就是使用 CatBoost 进行建模。关于 CatBoost 如何进行建模,我以后会写一篇相关文章《[[使用 CatBoost 实现分类特征的 SHAP]]》,你可以在其中找到此解决方案。

数据集

为了演示分类特征的问题,我们将使用蘑菇分类数据集。你可以在图 1 中看到此数据集的快照。目标变量是蘑菇的类别。也就是说,蘑菇是有毒 § 还是可食用 (e)。你可以在UCI 的 MLR1中找到此数据集。

图 1:蘑菇数据集快照

对于模型特征,我们有 22 个分类特征。对于每个特征,类别都用一个字母表示。例如,气味有 9 个独特的类别 - almond (a)、anise (l)、creosote ©, fishy (y), foul (f), musty (m), none (n), pungent §, spicy (s)。这就是蘑菇的气味。

建模

我们将向你介绍用于分析此数据集的代码,你可以在GitHub2上找到完整的脚本。首先,我们将使用下面的 Python 包。我们有一些用于处理和可视化数据的常用包(第 1-5 行)。我们使用 OneHotEncoder 来转换分类特征(第 7 行)。我们使用 xgboost 进行建模(第 10 行)。最后,我们使用 shap 来了解我们的模型是如何工作的(第 12 行)。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
plt.style.use('default')

from sklearn.preprocessing import OneHotEncoder
from sklearn.metrics import accuracy_score,confusion_matrix

import xgboost as xgb

import shap
shap.initjs()

我们导入数据集(第 2 行)。我们需要一个数值目标变量,因此我们通过设置 toxicous = 1 和 edible = 0 来转换它(第 6 行)。我们还获得了分类特征(第 7 行)。我们不使用 X_cat 进行建模,但它以后会派上用场。

# load data 
data = pd.read_csv(dp + "mushrooms.csv")

# get features
y = data['class']
y = y.astype('category').cat.codes
X_cat = data.drop('class', axis=1)

要使用分类特征,我们还需要对其进行转换。我们首先安装一个编码器(第 2-3 行)。然后我们使用它来转换分类特征(第 6 行)。对于每个分类特征,每个类别都有一个二进制特征。我们为每个二进制特征创建特征名称(第 9 至 10 行)。最后,我们将它们放在一起以创建特征矩阵(第 12 行)。

# fit encoder
enc = OneHotEncoder()
enc.fit(X_cat)

# transform categorical features
X_encoded = enc.transform(X_cat)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

茶桁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值