Wie erhalte ich Feature-Namen von shap_values von TreeExplainer?

mit

Ich mache ein Shap-Tutorial und versuche, die Shap-Werte für jede Person in einem Datensatz zu erhalten

from sklearn.model_selection import train_test_split
import xgboost
import shap
import numpy as np
import pandas as pd
import matplotlib.pylab as pl

X,y = shap.datasets.adult()
X_display,y_display = shap.datasets.adult(display=True)

# create a train/test split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=7)
d_train = xgboost.DMatrix(X_train, label=y_train)
d_test = xgboost.DMatrix(X_test, label=y_test)
params = {
    "eta": 0.01,
    "objective": "binary:logistic",
    "subsample": 0.5,
    "base_score": np.mean(y_train),
    "eval_metric": "logloss"
}
#model = xgboost.train(params, d_train, 5000, evals = [(d_test, "test")], verbose_eval=100, early_stopping_rounds=20)

xg_clf = xgboost.XGBClassifier()
xg_clf.fit(X_train, y_train)
explainer = shap.TreeExplainer(xg_clf, X_train)
#shap_values = explainer(X)
shap_values = explainer.shap_values(X)

den Python3-Interpreter durchläuft, shap_valuesist eine riesige Gruppe von 32.561 Personen, jede mit einem shap-Wert für 12 Funktionen.

Die erste Person hat beispielsweise die folgenden SHAP-Werte:

>>> shap_values[0]
array([ 0.76437867, -0.11881508,  0.57451954, -0.41974955, -0.20982443,
       -0.38079952, -0.00986504,  0.32272505, -3.04392116,  0.00411322,
       -0.26587735,  0.02700199])

Welcher Wert für welches Feature gilt, ist mir allerdings völlig schleierhaft.

die dokumentation sagt:

For models with a single output this returns a matrix of SHAP values
        (# samples x # features). Each row sums to the difference between the model output for that
        sample and the expected value of the model output (which is stored in the expected_value
        attribute of the explainer when it is constant). For models with vector outputs this returns
        a list of such matrices, one for each output

Wenn ich zu explainerwelcher Produktion gehe, shap_valuessehe ich, dass ich Feature-Namen erhalten kann:

explainer.data_feature_names
['Age', 'Workclass', 'Education-Num', 'Marital Status', 'Occupation', 'Relationship', 'Race', 'Sex', 'Capital Gain', 'Capital Loss', 'Hours per week', 'Country']

aber ich kann nicht sehen, wie man Feature-Namen innerhalb von shap_values ​​im Python-Interpreter erhält, wenn sie überhaupt vorhanden sind:

>>> shap_values.
shap_values.all(           shap_values.compress(      shap_values.dump(          shap_values.max(           shap_values.ravel(         shap_values.sort(          shap_values.tostring(
shap_values.any(           shap_values.conj(          shap_values.dumps(         shap_values.mean(          shap_values.real           shap_values.squeeze(       shap_values.trace(
shap_values.argmax(        shap_values.conjugate(     shap_values.fill(          shap_values.min(           shap_values.repeat(        shap_values.std(           shap_values.transpose(
shap_values.argmin(        shap_values.copy(          shap_values.flags          shap_values.nbytes         shap_values.reshape(       shap_values.strides        shap_values.var(
shap_values.argpartition(  shap_values.ctypes         shap_values.flat           shap_values.ndim           shap_values.resize(        shap_values.sum(           shap_values.view(
shap_values.argsort(       shap_values.cumprod(       shap_values.flatten(       shap_values.newbyteorder(  shap_values.round(         shap_values.swapaxes(      
shap_values.astype(        shap_values.cumsum(        shap_values.getfield(      shap_values.nonzero(       shap_values.searchsorted(  shap_values.T              
shap_values.base           shap_values.data           shap_values.imag           shap_values.partition(     shap_values.setfield(      shap_values.take(          
shap_values.byteswap(      shap_values.diagonal(      shap_values.item(          shap_values.prod(          shap_values.setflags(      shap_values.tobytes(       
shap_values.choose(        shap_values.dot(           shap_values.itemset(       shap_values.ptp(           shap_values.shape          shap_values.tofile(        
shap_values.clip(          shap_values.dtype          shap_values.itemsize       shap_values.put(           shap_values.size           shap_values.tolist(    

Meine Hauptfrage : Wie kann ich herausfinden, welche Funktion in

['Age', 'Workclass', 'Education-Num', 'Marital Status', 'Occupation', 'Relationship', 'Race', 'Sex', 'Capital Gain', 'Capital Loss', 'Hours per week', 'Country']

gilt für welche Zahl in jeder Zeile von shap_values?

>>> shap_values[0]
array([ 0.76437867, -0.11881508,  0.57451954, -0.41974955, -0.20982443,
       -0.38079952, -0.00986504,  0.32272505, -3.04392116,  0.00411322,
       -0.26587735,  0.02700199])

Ich würde davon ausgehen, dass die Funktionen in der gleichen Reihenfolge sind, aber ich habe keine Beweise dafür.

Meine zweite Frage: Wie finde ich die Funktionsnamen in shap_values?

Lucas

Die Funktionen sind tatsächlich in der gleichen Reihenfolge, wie Sie annehmen; sehen Sie, wie Sie die wichtigsten Feature-Namen extrahieren? und wie man Feature-Namen aus Explainer- Problemen in Github erhält .

Um den Featurenamen zu finden, müssen Sie einfach auf das Element mit dem gleichen Index des Arrays mit den Namen zugreifen

Zum Beispiel:

features_names = np.array([
    0.76437867, -0.11881508,  0.57451954, -0.41974955, -0.20982443,
   -0.38079952, -0.00986504,  0.32272505, -3.04392116,  0.00411322,
   -0.26587735,  0.02700199])
features_names = ['Age', 'Workclass', 'Education-Num', 'Marital Status', 'Occupation',
                  'Relationship', 'Race', 'Sex', 'Capital Gain', 'Capital Loss',
                  'Hours per week', 'Country']

features_names[shap_values.argmin()]  # the index 8 -> Capital Gain
features_names[shap_values.argmax()]  # the index 0 -> Age

Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.

Bei Verstößen wenden Sie sich bitte [email protected] Löschen.

bearbeiten am
0

Lass mich ein paar Worte sagen

0Kommentare
LoginNach der Teilnahme an der Überprüfung

Verwandte Artikel

Wie erhalte ich den Namen von MATLAB-Funktionsports?

Wie erhalte ich den Namen des Autors von Kommentaren?

Wie erhalte ich den Namen der Formulartabelle von der Anwendungsinstanz?

Wie erhalte ich den lokalen Namen von "gen_server"?

Wie erhalte ich den Namen von Streams in MinibatchSource?

Wie erhalte ich die Namen von Fremdschlüsseleinschränkungen in SQLite?

Wie erhalte ich Namen von Javascript-Objekteigenschaften?

Wie erhalte ich Namen von Funktionszeigerargumenten mit clang LibTooling?

Wie erhalte ich den Namen eines Verzeichnisses von Regex?

Wie erhalte ich den Namen der gezählten Werte bei Verwendung von count_values()?

Wie erhalte ich feature_importances_ von GridsearchCV?

Wie erhalte ich Koeffizienten und Feature-Wichtigkeiten von MultiOutputRegressor?

Wie erhalte ich den Namen von MethodCallExpr und FieldAccessExpr von jeder Methode in einer Klasse?

Wie erhalte ich die Namen von Symbolen als Liste von Zeichenfolgen?

Wie erhalte ich den Namen von GNU-Installationsverzeichnissen außerhalb von CMake oder make?

Wie erhalte ich den Namen von der ID von ForeignKey in Django?

Python SKLearn: Wie erhalte ich Feature-Namen nach OneHotEncoder?

Wie erhalte ich den geschützten Namen der Route, die ich von der getRoutes-Methode auf Laravel erhalte?

Wie erhalte ich den Tag-Namen von HTML mit Python Beautiful Soup?

Wie erhalte ich den Namen der Hauptklasse einer JAR-Datei von Java?

Wie erhalte ich den Namen des Tages von Java SQL.Timestamp-Objekt?

Wie erhalte ich Namen von Spalten aus einer Tabelle (Microsoft SQL Server)?

Wie erhalte ich den Pfad von Conda env aus seinem Namen?

Wie erhalte ich den Namen von Variablen der ersten Ebene einer Liste?

Wie erhalte ich Spalten mit Namen vordefinierter Äquivalenzklassen von Werten in jeder Zeile eines Pandas-Datenrahmens?

Wie erhalte ich nur einen ausgewählten Wert aus der Gruppe von Elementen mit demselben Namen?

Wie erhalte ich den Namen und den Typ der aufrufenden Methode mithilfe von Reflection?

Wie erhalte ich den Namen von System.Xml.Linq.XNode?

Wie erhalte ich eine String-Liste mit Benutzernamen und vollständigem Namen von Firebase?

TOP Liste

  1. 1

    TypeAhead.js zeigt keine Ausgangsschienen an?

  2. 2

    Wie lade ich eine Datei herunter, ohne den Typ oder Dateinamen zu kennen?

  3. 3

    So verschieben Sie ein Bild in Flutter/Dart mit einem Draggable

  4. 4

    Pandas rufen einen Wert basierend auf dem Index ab

  5. 5

    Unity Build-Fehler: Der Name 'EditorUtility' ist im aktuellen Kontext nicht vorhanden

  6. 6

    Wie kann ich eine verschachtelte Schleife mit lapply in R ersetzen?

  7. 7

    Interpolieren Sie mit Python die 2D-Matrix entlang der Spalten

  8. 8

    numpy: Berechnen Sie die Ableitung der Softmax-Funktion

  9. 9

    Warum funktioniert das Umgebungslicht in diesem Beispiel nicht?

  10. 10

    spring-data-jpa: ORA-01795: Die maximale Anzahl von Ausdrücken in einer Liste beträgt 1000

  11. 11

    Wie verwende ich Format-Table ohne Abschneiden von Werten?

  12. 12

    MongoDB eingebettetes Dokument unterscheiden und filtern

  13. 13

    So berechnen Sie die Verfügbarkeit von Anwendungen (SLA)

  14. 14

    Wie vermeide ich, dass die gesamte App neu geladen wird, wenn Nav.Link von React-Bootstrap verwendet wird?

  15. 15

    Aktualisieren des Werts im Json-Objekt in Python

  16. 16

    Wie aktualisiere ich ein Feld in einer Raumdatenbank mit einem Repository und einem Ansichtsmodell?

  17. 17

    Python gibt einen Fehler aus, dass eine Datei nicht vorhanden ist, wenn dies eindeutig der Fall ist

  18. 18

    Warum funktioniert Phantomjs nicht mit dieser Site?

  19. 19

    Docker bleibt beim Ausführen von time.sleep (1) in einer Python-Schleife hängen

  20. 20

    Überprüfen Sie, ob der ausgewählte Wert 'YES' ist, wenn ja, aktivieren Sie ein Steuerelement mit Javascript

  21. 21

    Deklarieren einer nicht initialisierten Variablen in der Klassendefinition in Python

heißlabel

Archiv