In diesem Artikel erfahren Sie mehr über SHAP: Modellerklärung für maschinelles Lernen

WBOY
Freigeben: 2024-06-01 10:58:13
Original
747 Leute haben es durchsucht

In den Bereichen maschinelles Lernen und Datenwissenschaft steht die Interpretierbarkeit von Modellen seit jeher im Fokus von Forschern und Praktikern. Mit der weit verbreiteten Anwendung komplexer Modelle wie Deep Learning und Ensemble-Methoden ist das Verständnis des Entscheidungsprozesses des Modells besonders wichtig geworden. Erklärbare KI |. XAI trägt dazu bei, Vertrauen in maschinelle Lernmodelle aufzubauen, indem es die Modelltransparenz erhöht. Eine Verbesserung der Modelltransparenz kann durch Methoden wie den weit verbreiteten Einsatz mehrerer komplexer Modelle sowie der Entscheidungsprozesse zur Erläuterung der Modelle erreicht werden. Zu diesen Methoden gehören die Analyse der Merkmalsbedeutung, die Schätzung des Modellvorhersageintervalls, lokale Interpretierbarkeitsalgorithmen usw. Die Merkmalswichtigkeitsanalyse kann den Entscheidungsprozess des Modells erklären, indem sie den Grad des Einflusses des Modells auf die Eingabemerkmale bewertet. Schätzungen des Modellvorhersageintervalls können deterministische Informationen über Modellvorhersagen liefern. Lokale Interpretierbarkeitsalgorithmen können helfen

XAI ist eine Reihe von Tools und Frameworks zum Verständnis und zur Erklärung, wie Modelle des maschinellen Lernens Entscheidungen treffen. Unter ihnen ist die SHAP-Bibliothek (SHapley Additive Erklärungen) in Python ein sehr nützliches Werkzeug. Die SHAP-Bibliothek quantifiziert den Beitrag von Features zu einzelnen Vorhersagen und Gesamtvorhersagen und bietet schöne und benutzerfreundliche Visualisierungen.

Als nächstes werden wir die Grundlagen der SHAP-Bibliothek skizzieren, um Vorhersagen für in Scikit-learn erstellte Regressions- und Klassifizierungsmodelle zu verstehen.

In diesem Artikel erfahren Sie mehr über SHAP: Modellerklärung für maschinelles Lernen

SHAP und SHAP-Werte

SHAP (Shapley Additive Explanations) ist eine spieltheoretische Methode zur Interpretation der Ausgabe jedes Modells für maschinelles Lernen. Es nutzt den Spielwert der klassischen Spieltheorie und die damit verbundenen Erweiterungen, um optimale Kreditzuweisung mit lokaler Interpretation zu kombinieren (Einzelheiten und Zitate finden Sie im entsprechenden Artikel: https://github.com/shap/shap#citations). SHAP bietet eine optimale Kreditzuweisung und lokale Erklärung, indem es den Beitrag jedes Merkmals zur Modellausgabe berechnet. Dieser Ansatz kann auf verschiedene Modelltypen angewendet werden, einschließlich linearer Modelle, Baummodelle, Deep-Learning-Modelle usw. Das Ziel von SHAP besteht darin, eine intuitive und interpretierbare Möglichkeit bereitzustellen, um Menschen dabei zu helfen, den Entscheidungsprozess des maschinellen Lernmodells und die Auswirkungen jeder Funktion auf die Vorhersageergebnisse zu verstehen. Durch die Verwendung von SHAP-Werten und zugehörigen Erweiterungen können wir eine genauere und umfassendere Interpretation der Merkmalsbedeutung erhalten, und Vor-SHAP+-Werte für das Modell können uns dabei helfen, den Beitrag von Merkmalen zu Vorhersagen zu quantifizieren. Je näher der SHAP-Wert an Null liegt, desto geringer ist der Beitrag des Merkmals zur Vorhersage. Je weiter der SHAP-Wert von Null entfernt ist, desto größer ist der Beitrag des Merkmals zur Vorhersage. Darüber hinaus kann uns der SHAP-Wert auch den Beitrag von Merkmalen zur Vorhersage verraten. Wenn der SHAP-Wert nahe bei Null liegt, bedeutet dies, dass die Funktion wenig zur Vorhersage beiträgt Erhalten Sie Merkmale in Regressionsproblemen SHAP-Wert. Wir beginnen mit dem Laden der Bibliothek und der Beispieldaten und erstellen dann schnell ein Modell zur Vorhersage des Diabetes-Verlaufs:

pip install shap-i https://pypi.tuna.tsinghua.edu.cn/simple
Nach dem Login kopieren

Eine gängige Methode zum Abrufen von SHAP-Werten ist die Verwendung eines Explainer-Objekts. Erstellen Sie als Nächstes ein Explainer-Objekt und extrahieren Sie den shap_test-Wert für die Testdaten:

import numpy as npnp.set_printoptions(formatter={'float':lambda x:"{:.4f}".format(x)})import pandas as pdpd.options.display.float_format = "{:.3f}".formatimport seaborn as snsimport matplotlib.pyplot as pltsns.set(style='darkgrid', context='talk', palette='rainbow')from sklearn.datasets import load_diabetesfrom sklearn.model_selection import train_test_splitfrom sklearn.ensemble import (RandomForestRegressor, RandomForestClassifier)import shapshap.initjs()# Import sample datadiabetes = load_diabetes(as_frame=True)X = diabetes['data'].iloc[:, :4] # Select first 4 columnsy = diabetes['target']# Partition dataX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1)print(f"Training features shape: {X_train.shape}")print(f"Training target shape: {y_train.shape}\n")print(f"Test features shape: {X_test.shape}")print(f"Test target shape: {y_test.shape}")display(X_train.head())# Train a simple modelmodel = RandomForestRegressor(random_state=42)model.fit(X_train, y_train)
Nach dem Login kopieren

In diesem Artikel erfahren Sie mehr über SHAP: Modellerklärung für maschinelles Lernen

shap_test hat eine Länge von 89, da es Datensätze für jede Testinstanz enthält. Wenn wir uns den ersten Testdatensatz ansehen, können wir erkennen, dass er drei Attribute enthält:

shap_test[0].base_values: der Basiswert des Ziels
shap_test[0].data: der Wert jedes Features

In diesem Artikel erfahren Sie mehr über SHAP: Modellerklärung für maschinelles Lernenshap_test[ 0].values: SHAP-Wert jedes Objekts

Basiswert: Basiswert (shap_test.base_values), auch als erwarteter Wert (explainer.expected_value) bekannt, ist der Durchschnitt der Zielwerte in den Trainingsdaten.

explainer = shap.Explainer(model)shap_test = explainer(X_test)print(f"Shap values length: {len(shap_test)}\n")print(f"Sample shap value:\n{shap_test[0]}")
Nach dem Login kopieren
EaShap_test.data enthält den gleichen Wert
  • Rreeee

In diesem Artikel erfahren Sie mehr über SHAP: Modellerklärung für maschinelles Lernen

values: Das wichtigste Attribut von Shap_test ist der Wert des Werts, da wir über ihn auf den Shap-Wert zugreifen können. Konvertieren wir den SHAP-Wert zur einfacheren Handhabung in einen DataFrame:
print(f"Expected value: {explainer.expected_value[0]:.1f}")print(f"Average target value (training data): {y_train.mean():.1f}")print(f"Base value: {np.unique(shap_test.base_values)[0]:.1f}")
Nach dem Login kopieren

In diesem Artikel erfahren Sie mehr über SHAP: Modellerklärung für maschinelles Lernen

可以看到每条记录中每个特征的 SHAP 值。如果将这些 SHAP 值加到期望值上,就会得到预测值:

In diesem Artikel erfahren Sie mehr über SHAP: Modellerklärung für maschinelles Lernen

np.isclose(model.predict(X_test),  explainer.expected_value[0] + shap_df.sum(axis=1))
Nach dem Login kopieren

In diesem Artikel erfahren Sie mehr über SHAP: Modellerklärung für maschinelles Lernen

现在我们已经有了 SHAP 值,可以进行自定义可视化,如下图所示,以理解特征的贡献:

columns = shap_df.apply(np.abs).mean()\ .sort_values(ascending=False).indexfig, ax = plt.subplots(1, 2, figsize=(11,4))sns.barplot(data=shap_df[columns].apply(np.abs), orient='h', ax=ax[0])ax[0].set_title("Mean absolute shap value")sns.boxplot(data=shap_df[columns], orient='h', ax=ax[1])ax[1].set_title("Distribution of shap values");plt.show()
Nach dem Login kopieren

In diesem Artikel erfahren Sie mehr über SHAP: Modellerklärung für maschinelles Lernen

左侧子图显示了每个特征的平均绝对 SHAP 值,而右侧子图显示了各特征的 SHAP 值分布。从这些图中可以看出,bmi 在所使用的4个特征中贡献最大。

Shap 内置图表

虽然我们可以使用 SHAP 值构建自己的可视化图表,但 shap 包提供了内置的华丽可视化图表。在本节中,我们将熟悉其中几种选择的可视化图表。我们将查看两种主要类型的图表:

  • 全局:可视化特征的整体贡献。这种类型的图表显示了特征在整个数据集上的汇总贡献。
  • 局部:显示特定实例中特征贡献的图表。这有助于我们深入了解单个预测。
  • 条形图/全局:对于之前显示的左侧子图,有一个等效的内置函数,只需几个按键即可调用:
shap.plots.bar(shap_test)
Nach dem Login kopieren

In diesem Artikel erfahren Sie mehr über SHAP: Modellerklärung für maschinelles Lernen

这个简单但有用的图表显示了特征贡献的强度。该图基于特征的平均绝对 SHAP 值而生成:shap_df.apply(np.abs).mean()。特征按照从上到下的顺序排列,具有最高平均绝对 SHAP 值的特征显示在顶部。

  • 总结图/全局:另一个有用的图是总结图:
shap.summary_plot(shap_test)
Nach dem Login kopieren

In diesem Artikel erfahren Sie mehr über SHAP: Modellerklärung für maschinelles Lernen

以下是解释这张图的指南:

  • 图的横轴显示了特征的 SHAP 值分布。每个点代表数据集中的一个记录。例如,我们可以看到对于 BMI 特征,点的分布相当散乱,几乎没有点位于 0 附近,而对于年龄特征,点更加集中地分布在 0 附近。
  • 点的颜色显示了特征值。这个额外的维度允许我们看到随着特征值的变化,SHAP 值如何变化。换句话说,我们可以看到关系的方向。例如,我们可以看到当 BMI 较高时(由热粉色点表示)SHAP 值倾向于较高,并且当 BMI 较低时(由蓝色点表示)SHAP 值倾向于较低。还有一些紫色点散布在整个光谱中。

  • 热力图/全局:热力图是另一种可视化 SHAP 值的方式。与将 SHAP 值聚合到平均值不同,我们看到以颜色编码的个体值。特征绘制在 y 轴上,记录绘制在 x 轴上:
shap.plots.heatmap(shap_test)
Nach dem Login kopieren

In diesem Artikel erfahren Sie mehr über SHAP: Modellerklärung für maschinelles Lernen

这个热力图的顶部还补充了每个记录的预测值(即 f(x))的线图。

  • Force plot/全局:这个交互式图表允许我们通过记录查看 SHAP 值的构成。
shap.initjs()shap.force_plot(explainer.expected_value, shap_test.values, X_test)
Nach dem Login kopieren

In diesem Artikel erfahren Sie mehr über SHAP: Modellerklärung für maschinelles Lernen

就像热力图一样,x 轴显示每个记录。正的 SHAP 值显示为红色,负的 SHAP 值显示为蓝色。例如,由于第一个记录的红色贡献比蓝色贡献多,因此该记录的预测值将高于期望值。

交互性允许我们改变两个轴。例如,y 轴显示预测值 f(x),x 轴根据输出(预测)值排序,如上面的快照所示。

  • 条形图/局部:现在我们将看一下用于理解个别案例预测的图表。让我们从一个条形图开始:
shap.plots.bar(shap_test[0])
Nach dem Login kopieren

In diesem Artikel erfahren Sie mehr über SHAP: Modellerklärung für maschinelles Lernen

与“ 条形图/全局 ”中完全相同,只是这次我们将数据切片为单个记录。

  1. Force plot/局部:Force plot是单个记录的强制图。
shap.initjs()shap.plots.force(shap_test[0])
Nach dem Login kopieren

In diesem Artikel erfahren Sie mehr über SHAP: Modellerklärung für maschinelles Lernen

分类模型的SHAP values/图表

上面示例是回归模型,下面我们以分类模型展示SHAP values及可视化:

import numpy as npnp.set_printoptions(formatter={'float':lambda x:"{:.4f}".format(x)})import pandas as pdpd.options.display.float_format = "{:.3f}".formatimport seaborn as snsimport matplotlib.pyplot as pltsns.set(style='darkgrid', context='talk', palette='rainbow')from sklearn.datasets import load_diabetesfrom sklearn.model_selection import train_test_splitfrom sklearn.ensemble import RandomForestClassifierimport shapfrom sklearn.datasets import fetch_openml# 加载 Titanic 数据集titanic = fetch_openml('titanic', version=1, as_frame=True)df = titanic.frame# 选择特征和目标变量features = ['pclass', 'age', 'sibsp', 'parch', 'fare']df = df.dropna(subset=features + ['survived'])# 删除包含缺失值的行X = df[features]y = df['survived']# 分割数据集X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 训练随机森林分类器model = RandomForestClassifier(n_estimators=100, random_state=42)model.fit(X_train, y_train)
Nach dem Login kopieren

In diesem Artikel erfahren Sie mehr über SHAP: Modellerklärung für maschinelles Lernen

和回归模型一样的,shap values 值也是包括base_values 和values 值:

explainer = shap.Explainer(model)shap_test = explainer(X_test)print(f"Length of shap_test: {len(shap_test)}\n")print(f"Sample shap_test:\n{shap_test[0]}")print(f"Expected value: {explainer.expected_value[1]:.2f}")print(f"Average target value (training data): {y_train}")print(f"Base value: {np.unique(shap_test.base_values)[0]:.2f}")shap_df = pd.DataFrame(shap_test.values[:,:,1],  columns=shap_test.feature_names,  index=X_test.index)shap_df
Nach dem Login kopieren

我们仔细检查一下将 shap 值之和添加到预期概率是否会给出预测概率:

np.isclose(model.predict_proba(X_test)[:,1],  explainer.expected_value[1] + shap_df.sum(axis=1))
Nach dem Login kopieren

In diesem Artikel erfahren Sie mehr über SHAP: Modellerklärung für maschinelles Lernen

内置图与回归模型是一致的,比如:

shap.plots.bar(shap_test[:,:,1])
Nach dem Login kopieren

In diesem Artikel erfahren Sie mehr über SHAP: Modellerklärung für maschinelles Lernen

或者瀑布图如下:

shap.plots.waterfall(shap_test[:,:,1][0])
Nach dem Login kopieren

In diesem Artikel erfahren Sie mehr über SHAP: Modellerklärung für maschinelles Lernen

示例

看一个具体的用例。我们将找出模型对幸存者预测最不准确的例子,并尝试理解模型为什么会做出错误的预测:

test = pd.concat([X_test, y_test], axis=1)test['probability'] = model.predict_proba(X_test)[:,1]test['order'] = np.arange(len(test))test.query("survived=='1'").nsmallest(5, 'probability')
Nach dem Login kopieren

In diesem Artikel erfahren Sie mehr über SHAP: Modellerklärung für maschinelles Lernen

生存概率为第一个记录的746。让我们看看各个特征是如何对这一预测结果产生贡献的:

ind1 = test.query("survived=='1'")\ .nsmallest(1, 'probability')['order'].values[0]shap.plots.waterfall(shap_test[:,:,1][ind1])
Nach dem Login kopieren

In diesem Artikel erfahren Sie mehr über SHAP: Modellerklärung für maschinelles Lernen

主要是客舱等级和年龄拉低了预测值。让我们在训练数据中找到类似的例子:

pd.concat([X_train, y_train], axis=1)[(X_train['pclass']==3) & (X_train['age']==29) & (X_train['fare'].between(7,8))]
Nach dem Login kopieren

In diesem Artikel erfahren Sie mehr über SHAP: Modellerklärung für maschinelles Lernen

所有类似的训练实例实际上都没有幸存。现在,这就说得通了!这是一个小的分析示例,展示了 SHAP 如何有助于揭示模型为何会做出错误预测。

在机器学习和数据科学中,模型的可解释性一直备受关注。可解释人工智能(XAI)通过提高模型透明度,增强对模型的信任。SHAP库是一个重要工具,通过量化特征对预测的贡献,提供可视化功能。本文介绍了SHAP库的基础知识,以及如何使用它来理解回归和分类模型的预测。通过具体用例,展示了SHAP如何帮助解释模型错误预测。

Das obige ist der detaillierte Inhalt vonIn diesem Artikel erfahren Sie mehr über SHAP: Modellerklärung für maschinelles Lernen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:51cto.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage