Extraction lisible des explications LIME : méthode as_list()

Après avoir obtenu une explication locale d’une prédiction avec LIME, il est souvent nécessaire d’extraire ces résultats de manière claire et structurée pour les analyser ou les présenter. La méthode as_list() permet de transformer l’explication en une liste ordonnée de paires (feature, poids).

Chaque élément de cette liste correspond à une caractéristique (feature) du jeu de données et à son impact sur la prédiction locale, représenté par un poids positif ou négatif. Cette extraction facilite la lecture, l’exportation et l’intégration des explications dans des rapports ou interfaces utilisateur.


Objectifs de as_list()


Fonctionnement général

  1. Appelée sur un objet explanation généré par LIME.

  2. Renvoie une liste triée par ordre d’importance des features.

  3. Chaque élément est une paire (feature, poids) décrivant l’influence locale.

Fonctions :

  • explanation.as_list()

    as_list() est une méthode de l'objet Explanation dans LIME, utilisée pour obtenir l'explication d'une instance sous forme de liste. Cette liste contient des tuples, où chaque tuple est composé d'un mot (ou d'une caractéristique) et de son poids associé, représentant l'importance de chaque caractéristique (comme un mot) dans la prédiction du modèle. L'ordre des éléments dans la liste est trié par la magnitude du poids, de sorte que les caractéristiques les plus influentes sont placées en premier.

    Attributs :

    La méthode as_list() n'a pas de paramètres supplémentaires, mais elle retourne un objet de type list qui contient des tuples.

    Exemple de code :

    from lime.lime_text import LimeTextExplainer
    from sklearn.datasets import fetch_20newsgroups
    from sklearn.model_selection import train_test_split
    from sklearn.naive_bayes import MultinomialNB
    from sklearn.feature_extraction.text import CountVectorizer
    
    # Charger le jeu de données 20 newsgroups
    newsgroups = fetch_20newsgroups(subset='train')
    X = newsgroups.data
    y = newsgroups.target
    
    # Vectorisation des données textuelles
    vectorizer = CountVectorizer(stop_words='english')
    X_vectorized = vectorizer.fit_transform(X)
    
    # Diviser les données en ensembles d'entraînement et de test
    X_train, X_test, y_train, y_test = train_test_split(X_vectorized, y, test_size=0.2, random_state=42)
    
    # Entraîner un modèle Naive Bayes
    model = MultinomialNB()
    model.fit(X_train, y_train)
    
    # Créer un explainer LIME pour les données textuelles
    explainer = LimeTextExplainer(class_names=newsgroups.target_names)
    
    # Choisir une instance à expliquer
    instance = X_test[0]
    instance_text = X_test[0].toarray()
    
    # Générer l'explication pour l'instance
    explanation = explainer.explain_instance(instance_text, model.predict_proba)
    
    # Obtenir l'explication sous forme de liste
    explanation_list = explanation.as_list()
    
    # Afficher l'explication sous forme de liste
    for word, weight in explanation_list:
        print(f"{word}: {weight}")

    Explication du code :

    • Préparation des données : Le même jeu de données 20newsgroups est utilisé, avec des étapes de vectorisation, de division en ensembles d'entraînement et de test, ainsi que l'entraînement d'un modèle Naive Bayes comme dans l'exemple précédent.

    • Explication de l'instance : L'instance du jeu de test est choisie, et l'explication est générée à l'aide de la méthode explain_instance().

    • Conversion de l'explication en liste : La méthode as_list() est utilisée pour convertir l'explication sous forme de liste. Cette liste contient des tuples de mots et de poids associés. Le poids représente l'importance de chaque mot dans la décision du modèle, et les mots sont triés par ordre d'importance.

    • Affichage des résultats : Le résultat est imprimé, où chaque ligne montre un mot suivi de son poids d'importance dans la prédiction.