关于机器学习:在机器学习中使用-SHAP-值实现模型可解释性

50次阅读

共计 3253 个字符,预计需要花费 9 分钟才能阅读完成。

举荐:应用 NSDT 场景编辑器助你疾速搭建可二次编辑的 3D 利用场景

机器学习可解释性

机器学习可解释性是指用于解释和了解机器学习模型如何进行预测的技术。随着模型变得越来越简单,解释它们的外在逻辑并深刻理解它们的行为变得越来越重要。

这很重要,因为机器学习模型通常用于做出具备事实世界结果的决策,例如医疗保健、金融和刑事司法。如果没有可解释性,就很难晓得机器学习模型是否做出了正确的决策,或者它是否有偏见。

在机器学习可解释性方面,须要思考各种技术。一种风行的办法是确定特色重要性分数,该分数揭示了对模型预测影响最大的特色。SKlearn 模型默认提供特色重要性分数,但您也能够利用 SHAP、Lime 和 Yellowbrick 等工具来更好地可视化和了解机器学习后果。

本教程将介绍 SHAP 值以及如何应用 SHAP Python 包解释机器学习后果。

什么是 SHAP 值?

SHAP 值基于博弈论中的 Shapley 值。在博弈论中,Shapley 值有助于确定合作博弈中的每个玩家对总支出的奉献。

对于机器学习模型,每个特色都被视为一个“玩家”。因素的 Shapley 值示意该因素在所有可能的特色组合中的奉献的均匀量级。

具体而言,SHAP 值是通过比拟存在和不存在特定特色的模型预测来计算的。这是针对数据集中的每个因素和每个样本以迭代形式实现的。

通过为每个特色调配每个预测的重要性值,SHAP 值提供了模型行为的本地、统一的解释。它们揭示了哪些特色对特定预测的影响最大,无论是侧面的还是负面的。这对于了解简单机器学习模型(如深度神经网络)背地的推理很有价值。

SHAP 值入门

在本节中,咱们将应用 Kaggle 的挪动价格分类数据集来构建和剖析多分类模型。咱们将依据性能(例如 RAM,尺寸等)对手机价格进行分类。指标变量为 price_range,值为 0(低成本)、1(中等老本)、2(高老本)和 3(十分高的老本)。

留神:带有输入的代码源可在 Deepnote 工作区中找到。

装置 SHAP 应用 pipconda命令在零碎上装置 shap 非常简单。

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)

摘要图

汇总图是模型中每个特色的特色重要性的图形示意。它是理解模型如何进行预测和辨认最重要特色的有用工具。

在咱们的例子中,它显示了每个指标类的特色重要性。事实证明,手机的“内存”,“battery_power”和尺寸在决定价格范畴方面起着重要作用。

# Summarize the effects of features
shap.summary_plot(shap_values, X_test)

咱们当初将可视化类“0”的将来重要性。咱们能够分明地看到,RAM、电池和手机尺寸对预测低成本手机有负面影响。

shap.summary_plot(shap_values[0], X_test)

依赖关系图

依赖图是一种散点图,用于显示特定特色如何影响模型的预测。在此示例中,性能为“battery_power”。

图的 x 轴显示“battery_power”的值,y 轴显示形态值。当电池电量超过 1200 时,开始对低端手机型号的分类产生负面影响。

shap.dependence_plot("battery_power", shap_values[0], X_test,interaction_index="ram")

力求

让咱们将焦点放大到单个样本。具体来说,咱们将认真钻研第 12 个样本,看看哪些特色导致了“0”后果。为此,咱们将应用力求并输出期望值、SHAP 值和测试样本。

事实证明,RAM、手机尺寸和时钟速度对型号的影响更大。咱们还留神到,该模型不会预测“0”类,因为 f(x)较低。

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 值提供了一种灵便、统一的办法来解释预测和模型行为。它可用于深刻理解模型如何进行预测、辨认潜在偏差并进步模型的性能。

原文链接:https://www.mvrlink.com/using-shap-values-to-achieve-model-in…

正文完
 0