Interessanterweise finden wir das Achsel Begriff in der Botanik, aber wir werden über digitale Bäume sprechen, nicht über die Pflanzen 😉
ACHSE (Additive eXplanations with Occasion Loadings)³ ist ein neuer Ansatz zur Erklärung von Vorhersagen von Baumensembles und linearen Modellen, vorgeschlagen von Paul Geertsema und Helen Lu. Üblicherweise werden Methoden zur erklärbaren KI (XAI) in zwei Gruppen eingeteilt:
- lokal¹ (Instanzebene²)
- global¹ (Datensatzebene²)
In beiden Fällen versuchen wir, die Auswirkungen bestimmter Merkmale im Modell zu quantifizieren: für eine bestimmte Vorhersage oder für das gesamte Modell im Allgemeinen. Allerdings haben die Autoren von AXIL zu Recht darauf hingewiesen:
(..) Es lohnt sich, uns daran zu erinnern, dass die Datenmatrix zweidimensional ist und sowohl Merkmale als auch Instanzen umfasst. Wir präsentieren eine neuartige Klasse von Instanzbasiert Erklärungen, die bestehende merkmalsbasierte Erklärungen im Kontext linearer und baumbasierter Regressionsmodelle ergänzen.³
AXIL ist eine Studie zur Beantwortung der folgenden Frage: Wie stark beeinflussen die jeweiligen Trainingsinstanzen die jeweiligen Vorhersagen? Bitte verwechseln Sie die Begriffe nicht Instanzebene im Sinne des EMA-Buches² und Instanzbasiert aus AXIL-Papier. AXIL ist eine instanzbasierte Methode und kann zum Generieren sowohl lokaler (Instanzebene) als auch globaler (Datensatzebene) Erklärungen verwendet werden.
Der Algorithmus basiert auf der treffenden Beobachtung, dass Vorhersagen linearer Modelle und Baumensembles als lineare Kombination von Zielen aus dem Trainingsdatensatz neu ausgedrückt werden können.
Natürlich könnten wir ein wenig schummeln und dieses Ziel erreichen, indem wir mit Multiplikatoren für beliebige Paare oder sogar ein Ziel manipulieren, aber darum geht es nicht.
Unser Ziel ist es, AXIL-Gewichte zu berechnen, um zu reflektieren, wie das Modell wirklich funktioniert. Erwähnenswert ist auch, dass die Autoren einen wichtigen Satz (ausgearbeitet im Anhang des Papiers) bereitstellen, der besagt:
Satz 1. Jede GBM-Regressionsvorhersage ist eine lineare Kombination von Trainingsdatenzielen y.³
Lassen Sie uns nach dieser Einführung Schritt für Schritt zeigen, wie dies erreicht wird. Und ein wichtiger Haftungsausschluss zu Beginn: Der unten beschriebene Algorithmus gilt nur für baumbasierte Modelle zur Optimierung von (R)MSE.
Passend zu
1. Bestimmen Sie für jeden Baum, in welches Blatt das spezifische Trainingsziel fällt.
2. Berechnen Sie den Zielbeitrag zur anfänglichen Schätzung (Mittelwert) als 1/N für jedes Ziel.
Die erste Baumgewichtsmatrix P_0 ist auch die Anfangsmatrix G Wir verwenden, um die Änderungen des Ziels im zu akkumulieren i-th Iteration und berechnen Sie den Skalierungskoeffizienten für jeden Schritt (da in den nächsten Schritten nicht mehr die ursprünglichen Ziele vorhanden sind, sondern ihre Reste (oder Pseudo-Residuen).
3. Berechnen Sie für jeden Baum die Matrix der skalierten Blattkoinzidenzen.
Wir bestimmen zunächst die Matrix der Blattkoinzidenzen (N, N). Es ist gleich eins für ein gegebenes (i, j), wenn sie fallen in dasselbe Blatt des jeweiligen Baumes. Anschließend werden die Werte anhand der Anzahl der Vorkommen in Blättern skaliert. Jede Zeile und Spalte ergibt zusammen eins, während die Summe der Elemente auf der Hauptdiagonale gleich der Anzahl der Blätter des Baumes ist. Die aktuelle Model des Algorithmus ist nur für Modelle mit Regularisierung gültig Lambda Parameter gleich 0.
4. Um die Teilgewichte für zu erhalten i-th Baum, multiplizieren Sie die skalierte Blattkoinzidenzmatrix mit der Lernrate und der Matrix der Restkoeffizienten.
Der Buchstabe eins ermöglicht es uns, die Residuen der ursprünglichen Zielwerte zu berücksichtigen, die in der verfügbar sind i-th Iteration des Algorithmus.
Seien Sie hier vorsichtig: Ich habe das im AXIL-Papier verwendete Lernratensymbol absichtlich ersetzt λ (Lambda) mit demjenigen, der üblicherweise zur Bezeichnung dieses Werts verwendet wird η (eta). Das liegt daran, dass Verwirrung vermieden werden soll Lernrate mit dem Lambda-Regularisierungsparameterdas in mehreren GBM-Implementierungen verwendet wird.
Dann aktualisieren wir die G Matrix durch Addition Pi Werte und wir wiederholen den gleichen Vorgang für alle Bäume im Modell.
Vorhersage
Vorhersage bedeutet in diesem Zusammenhang die Generierung von AXIL-Gewichten für den gegebenen Satz neuer Dateninstanzen.
- Identifizieren Sie, auf welche Blätter die neuen Dateninstanzen fallen.
- Summieren Sie die Pi Gewichtungen, die für die neuen Dateninstanzen ausgewählt wurden.
Im vereinfachten Beispiel unten können wir sehen, dass jede Trainingsinstanz die anfängliche Schätzung beisteuert, aber in den nächsten Schritten wählen wir diejenigen Werte aus, die mit den Blättern verbunden sind, in die die neue Instanz fällt.
Wenn Sie eine weitere Erklärung dieses Algorithmus sehen möchten, füge ich unten ein Video mit einer Präsentation der AXIL-Autoren ein.
Die Autoren weisen auf die folgenden Einschränkungen des AXIL-Algorithmus hin:
- gilt nur für Regressionsaufgaben (derzeit ausschließlich für RMSE definiert)
- relativ hohe Rechenkomplexität (kann durch einige Näherungslösungen gemildert werden)
- modellspezifisch (kann z. B. nicht auf neuronale Netze angewendet werden)
Darüber hinaus möchte ich Folgendes erwähnen:
- Im Second funktioniert es nur mit
reg_lambda=0
- Auch das Absacken sollte ausgeschaltet sein
Der Algorithmus wurde ursprünglich von den Autoren selbst implementiert und in a geteilt GitHub-Repository ihrem Aufsatz gewidmet. Der axil.py ist eine Datei, die wir in unser Projekt einfügen können, um sie zu importieren Explainer
Klasse, während wdi.py ist ein hilfreiches Anwendungsbeispiel. Ich ermutige Sie freundlich, sich mit diesem Repo vertraut zu machen. Im Second funktioniert es jedoch nur LGBMRegressor
Objekte als Eingabe, additionally habe ich beschlossen, diesen Code ein wenig anzupassen und ihn in meinen einzubinden scikit-gbm Bibliothek. Nach ein paar Optimierungen werden folgende Modelle akzeptiert:
LGBMRegressor
XGBoostRegressor
CatBoostRegressor
GradientBoostingRegressor
(scikit-lernen)
Ich werde den ursprünglichen Algorithmus ändern, um Modelle mit Lambda-Regularisierung zu verarbeiten. Im Second ist diese Funktion noch nicht bereit, daher wird ein Fehler ausgegeben, wenn Sie versuchen, eine zu erstellen AXIL
Erklärer mit reg_lamdba > 0
.
Unten sehen Sie eine Präsentation, wie Sie das verwenden AXIL
Erklärer aus der scikit-gbm-Bibliothek. Der Code zum Erstellen der Plots wurde größtenteils von den oben genannten entlehnt wdi.py Skript, während der Spielzeugdatensatz von Kaggle stammt (Länderstatistiken – UNData).
AXIL-Gewichtungsmatrix
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
from lightgbm import LGBMRegressor
import numpy as npfrom skgbm.xai import AXIL
# Making ready dataset
df = pd.read_csv('archive/country_profile_variables.csv')
df.columns =
df.columns.str.strip().str.decrease()
.str.substitute('(.*)', '')
.str.strip()
.str.substitute(' ', '_')
.str.substitute(',', '')
.str.substitute('.', '')
.str.substitute(':', '')
df = df.substitute({'~0': '0', '...': np.nan}, regex=True)
df = df.iloc[:, :14]
df.iloc[:, 2:14] =
df.iloc[:, 2:14].convert_dtypes(convert_string=True).astype(float)
df_medium = df.pattern(frac=.5).reset_index()
df_small = df.pattern(frac=.1).reset_index()
TARGET = 'gdp_gross_domestic_product'
FIRST_COL = 3
LAST_COL = 6
X, y = df_medium.iloc[:, FIRST_COL:LAST_COL].drop(columns=TARGET), df[TARGET]
X_train, X_test, y_train, y_test = train_test_split(X, y)
# Becoming a GBM mannequin
gbm_reg = XGBRegressor(reg_lambda=0).match(X_train, y_train)
# gbm_reg = LGBMRegressor(reg_lambda=0).match(X_train, y_train)
# gbm_reg = GradientBoostingRegressor().match(X_train, y_train)
# gbm_reg = CatBoostRegressor(reg_lambda=0).match(X_train, y_train)
# Becoming AXIL explainer
axil = AXIL(gbm)
axil.match(X_train)
# Transformation
k_test = axil.rework(X_test)
# Test, if the weights are right
y_pred = gbm.predict(X_test)
np.isclose(y_pred, k_test.T @ y_train, rtol=0.0001).all()
Heatmap
import seaborn as sns
import matplotlib.pyplot as plt
plt.rcParams['figure.figsize'] = [10, 30]plt.shut()
ax = sns.heatmap(
k_test, cbar=False,
xticklabels=l_test, yticklabels=l_train
)
ax.yaxis.tick_right()
ax.set(ylabel=None)
ax.tick_params(axis='each', which='main', labelsize=8)
plt.yticks(rotation=0)
ax.determine.tight_layout()
plt.present()
Clustermap
k_train = axil.rework(X_train)import scipy.spatial as sp, scipy.cluster.hierarchy as hc
linkage = hc.linkage(k_train, technique='common')
ax = sns.clustermap(k_train, row_linkage=linkage,
col_linkage=linkage,
cmap='Blues',
xticklabels=l_train, yticklabels=l_train,
cbar_pos=None)
#ax.determine.tight_layout()
ax.ax_heatmap.set_ylabel("")
plt.present()
Netzwerk
import networkx as nx
plt.rcParams['figure.figsize'] = [10, 10]X, y, labels =
df_small.iloc[:, FIRST_COL:LAST_COL], df_small[TARGET], df_small.iloc[:, 1]
# Becoming
gbm = XGBRegressor(reg_lambda=0).match(X, y)
axil = AXIL(gbm).match(X)
k_small = axil.rework(X)
graph = k_small.copy()
np.fill_diagonal(graph, 0)
G = nx.from_numpy_matrix(graph)
nx.draw_circular(
G, with_labels=True, labels=labels.to_dict(),
font_weight='gentle', node_color = y.to_list(),
cmap="Reds", edge_color="grey"
)
Wie immer nichts (völlig) Neues unter der Sonne. Obwohl der AXIL-Algorithmus tatsächlich innovativ ist, können wir einige andere, frühere Ansätze finden, die einige Verbindungen zu diesem Bereich haben.
k-nächste Nachbarn
k-NN ist ein Beispiel für ein Modell, das intrinsisch erklärbar ist und Teil eines sogenannten Modells ist Instanzbasiertes Lernen Methoden. Es verknüpft die Stichprobe aus den neuen Daten direkt mit den ähnlichsten Beobachtungen aus dem Trainingsdatensatz. Da es jedoch nicht für alle Arten von Problemen geeignet ist, ist es intestine, über andere Instruments zu verfügen, um solche Informationen beispielsweise aus GBM zu extrahieren.
Einflussreiche Beispiele
Es gibt bereits einige Methoden, die versuchen, die Beziehung zwischen den Trainingssatzinstanzen und der Vorhersage des angepassten Modells zu identifizieren. Es lohnt sich, mindestens vier Beispiele zu nennen:
Trotz der oberflächlichen Ähnlichkeit beantwortet diese Technik eine andere Frage: Wie kann die Qualität des Modells verbessert werden, wenn wir die Bedeutung bestimmter Instanzen optimieren?
Dieses Thema verdient einen separaten Artikel, um es ausführlich zu behandeln. Entdecken Sie die Bibliographie des Artikels und Einflussfunktion Thema auf GitHub, um mehr zu erfahren.
- Molnar Ch. (2023) Interpretierbares maschinelles Lernen: Ein Leitfaden, um Black-Box-Modelle erklärbar zu machen
- Biecek P. und Burzykowski T. (2021) Erklärende Modellanalyse
- Geertsema P. und Lu H. (2023) Instanzbasierte Erklärungen für Gradient Boosting Machine-Vorhersagen mit AXIL-Gewichten
- AXIL-Papier – GitHub-Repo
- Brophy J., Hammoudeh Z. und Lowd D. (2023) Anpassung und Bewertung von Einflussschätzungsmethoden für Gradienten-verstärkte Entscheidungsbäume
- Koh PW und Liang P. (2017) Black-Box-Vorhersagen über Einflussfunktionen verstehen
- Sharchilev B., Ustinovsky Y., Serdyukov P. und de Rijke M. (2018) Finden einflussreicher Trainingsbeispiele für Entscheidungsbäume mit Gradientenverstärkung