用于高效视频、人工智能和图形的通用加速器

作者提供的图片
机器学习的可解释性
机器学习可解释性是指解释和理解机器学习模型如何进行预测的技术。随着模型变得越来越复杂,解释其内部逻辑并深入了解其行为变得越来越重要。
这很重要,因为机器学习模型通常用于做出对现实世界产生影响的决策,例如在医疗保健、金融和刑事司法领域。如果没有可解释性,就很难知道机器学习模型是否做出了正确的决策,或者是否存在偏见。
当谈到机器学习的可解释性时,有多种技术需要考虑。一种流行的方法是确定特征重要性分数,它揭示对模型预测影响最大的特征。SKlearn 模型默认提供特征重要性分数,但您也可以利用SHAP、Lime和Yellowbrick等工具来更好地可视化和理解机器学习结果。
本教程将介绍 SHAP 值以及如何使用 SHAP Python 包解释机器学习结果。
什么是 SHAP 值?
SHAP值基于博弈论中的 Shapley 值。在博弈论中,沙普利值有助于确定协作游戏中每个玩家对总支出的贡献程度。
对于机器学习模型,每个特征都被视为一个“玩家”。特征的 Shapley 值表示该特征对所有可能的特征组合的贡献的平均大小。
具体来说,SHAP 值是通过比较存在和不存在特定特征的模型的预测来计算的。这是针对数据集中的每个特征和每个样本迭代完成的。
通过为每个预测为每个特征分配一个重要性值,SHAP 值可以对模型的行为方式提供本地一致的解释。它们揭示了哪些特征对特定预测影响最大,无论是积极的还是消极的。这对于理解复杂的机器学习模型(例如深度神经网络)背后的推理非常有价值。
SHAP 值入门
在本节中,我们将使用Kaggle 的移动价格分类数据集来构建和分析多分类模型。我们将根据 RAM、尺寸等功能对手机价格进行分类。目标变量是 <code>price_range</code>,值为 0(低成本)、1(中等成本)、2(高成本)成本)和3(成本非常高)。
注意:带有输出的代码源可在Deepnote 工作区中找到。
安装SHAP
使用 <code>pip</code> 或 <code>conda</code> 命令在系统上安装 <code>shap</code> 非常简单。
pip install shap
或者
conda install -c conda-forge shap
加载数据
数据集干净且组织良好,使用标签编码器将类别转换为数字。
import pandas as pd
mobile = pd.read_csv("train.csv")
mobile.head()

准备数据
首先,我们将确定因变量和自变量,然后将它们分成单独的训练集和测试集。
from sklearn.model_selection import train_test_split
X = mobile.drop('price_range', axis=1)
y = mobile.pop('price_range')
# Train and test split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=1)
训练和评估模型
之后,我们将使用训练集训练随机森林分类器模型,并评估其在测试集上的性能。我们获得了 87% 的准确率,相当不错,而且我们的模型总体上很平衡。
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report
# Model fitting
rf = RandomForestClassifier()
rf.fit(X_train, y_train)
# Prediction
y_pred = rf.predict(X_test)
# Model evaluation
print(classification_report(y_pred, y_test))
precision recall f1-score support
0 0.95 0.91 0.93 141
1 0.83 0.81 0.82 153
2 0.80 0.85 0.83 158
3 0.93 0.93 0.93 148
accuracy 0.87 600
macro avg 0.88 0.87 0.88 600
weighted avg 0.87 0.87 0.87 600
计算 SHAP 值
在这一部分中,我们将创建一个 SHAP 树解释器并使用它来计算测试集的 SHAP 值。
import shap
shap.initjs()
# Calculate SHAP values
explainer = shap.TreeExplainer(rf)
shap_values = explainer.shap_values(X_test)
概要图
摘要图是模型中每个特征的特征重要性的图形表示。它是了解模型如何进行预测和识别最重要特征的有用工具。
在我们的例子中,它显示了每个目标类别的特征重要性。事实证明,“内存”、“电池电量”和手机尺寸在决定价格范围方面发挥着重要作用。
# Summarize the effects of features
shap.summary_plot(shap_values, X_test)

现在我们将想象“0”类未来的重要性。我们可以清楚地看到,内存、电池和手机尺寸对预测低成本手机有负面影响。
shap.summary_plot(shap_values[0], X_test)

相关图
相关图是一种散点图,显示特定特征如何影响模型的预测。在此示例中,该功能是“battery_power”。
该图的 x 轴显示“battery_power”的值,y 轴显示 shap 值。当电池电量超过1200时,就开始对低端手机型号的分类产生负面影响。
shap.dependence_plot("battery_power", shap_values[0], X_test,interaction_index="ram")

力图
让我们将注意力集中在单个样本上。具体来说,我们将仔细查看第 12 个样本,看看哪些特征导致了“0”结果。为了实现这一点,我们将使用力图并输入预期值、形状值和测试样本。
事实证明,内存、手机尺寸和时钟速度对型号的影响更大。我们还注意到,由于 f(x) 较低,该模型不会预测“0”类。
shap.plots.force(explainer.expected_value[0], shap_values[0][12,:], X_test.iloc[12, :], matplotlib = True)

现在,我们将可视化“1”类的力图,我们可以看到它是正确的类。
shap.plots.force(explainer.expected_value[1], shap_values[1][12, :], X_test.iloc[12, :],matplotlib = True)

我们可以通过检查测试集的第 12 条记录来确认我们的预测。
y_test.iloc[12]
>>> 1
决策图
决策图可以成为理解机器学习模型决策过程的有用工具。它们可以帮助我们识别对模型预测最重要的特征并识别潜在的偏差。
为了更好地理解影响模型对“1”类预测的因素,我们将检查决策图。根据该图,手机高度似乎对模型产生负面影响,而 RAM 则产生积极影响。
shap.decision_plot(explainer.expected_value[1], shap_values[1][12,:], X_test.columns)

结论
在这篇博文中,我们介绍了 SHAP 值,这是一种解释机器学习模型输出的方法。我们已经展示了如何使用 SHAP 值来解释个体预测和模型的整体性能。我们还提供了如何在实践中使用 SHAP 值的示例。
随着机器学习扩展到医疗保健、金融和自动驾驶汽车等敏感领域,可解释性和可解释性只会变得越来越重要。SHAP 值提供了一种灵活、一致的方法来解释预测和模型行为。它可用于深入了解模型如何进行预测、识别潜在偏差并提高模型的性能。
阿比德·阿里·阿万( @1abidaliawan)是一位经过认证的数据科学家专业人士,热爱构建机器学习模型。目前,他专注于内容创作和撰写有关机器学习和数据科学技术的技术博客。阿比德拥有技术管理硕士学位和电信工程学士学位。他的愿景是使用图神经网络为患有精神疾病的学生构建人工智能产品。
ChatGPT、ChatGPT中国站、国内ChatGPT、人工智能、AI、OpenAI、ChatGPT国内、ChatGPT官网、ChatGPT中文版、ChatGPT体验、ChatGPT国内站点、ChatGPT中文网、ChatGPT国内、中国版ChatGPT、ChatGPT中国镜像、ChatGPT国内镜像、AI全家桶、AI导航、MJ绘画、AI绘画技术、人工智能绘画、AI艺术创作、智能绘图软件