1. ホーム
  2. スクリプト・コラム
  3. パイソン

Python機械学習Githubが8.9Kstarsに達したモデルインタープリタLIME

2022-01-02 07:23:57

線形回帰、LRなどの単純なモデルは解釈が非常に簡単ですが、実際には複雑なgradient boosting treeモデルやニューラルネットワークに比べるとはるかに効果が低いです。

現在、ほとんどのインターネット企業は、グラディエントブースティングツリーやニューラルネットワークモデルなどの複雑なモデルをベースにモデリングを行っています。残念ながら、これらのモデルはうまく機能しますが、うまく解釈することが難しく、これは誰もが悩む重要な問題であり、現在、モデルの解釈について注目が集まっています。

本稿では、SHARPのアップデート版と考えることができる機械学習モデルの出力解釈手法であるLIMEを紹介する(Githubリンク)。 https://github.com/marcotcr/lime これで支持率アップ間違いなし!

LIME

LIME (Local Interpretable Model-agnostic Explanations)がサポートするモデルは以下の通り。

  • 構造化モデルの解釈
  • テキスト分類器の説明。
  • 画像分類の説明。

機械学習モデルの説明としてLIMEが使われていますが、LIMEを使えば、なぜそのモデルがそのような予測をするのかを知ることができます。

今回は、LIMEが予測結果をどのように説明しているかを観察することに焦点を当てます。

コード

ここでは、winequality-whiteデータセットを使用し、quality<=5を0に、その他の値を1に設定しています。

# !pip install lime
import pandas as pd
from xgboost import XGBClassifier
import shap
import numpy as np
from sklearn.model_selection import train_test_split


df = pd.read_csv('. /data/winequality-white.csv',sep = ';')
df['quality'] = df['quality'].apply(lambda x: 0 if x <= 5 else 1)
df.head()


# Training set test set split
X = df.drop('quality', axis=1)
y = df['quality'] 
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1)
# Model training
model = XGBClassifier(n_estimators = 100, random_state=42)
model.fit(X_train, y_train)
score = model.score(X_test, y_test)
score


XGBClassifierでのラベルエンコーダーの使用は非推奨であり、将来のリリースで削除される予定です。0.832653061224489

単一サンプルの予測解釈

下のグラフは、1つのサンプルの予測値における各特徴の寄与度を示しています。

import lime
from lime import lime_tabular
explainer = lime_tabular.LimeTabularExplainer(
    training_data=np.array(X_train),
    feature_names=X_train.columns,
    class_names=['bad', 'good'],
    mode='classification'
)


このモデルは、ワインが悪いという信頼度が84%で、ここで alcohol ,合計の二酸化硫黄が最も重要である。

import lime
from lime import lime_tabular
explainer = lime_tabular.LimeTabularExplainer(
    training_data=np.array(X_train),
    feature_names=X_train.columns,
    class_names=['bad', 'good'],
    mode='classification'
)


このモデルでは、ワインが悪いという信頼度は59%で、このうち、アルコール、塩化物、密度、クエン酸が最も重要な予測参照となります。

exp = explainer.explain_instance(data_row=X_test.iloc[1], predict_fn=model.predict_proba)
exp.show_in_notebook(show_table=True)


該当する質問

LIMEは、機械学習モデルを結果予測でシンプルに説明するという点で、SHARPからのステップアップと考えることができます。地下で何が起こっているのか、技術者ではない人に説明するのに最適な方法を提供してくれます。データの可視化については、LIMEライブラリが処理してくれるので、心配はいりません。

参考リンク

https://www.kaggle.com/piyushagni5/white-wine-quality
LIME:Pythonで機械学習モデルを解釈する方法
https://github.com/marcotcr/lime
https://mp.weixin.qq.com/s/47omhEeHqJdQTtciLIN2Hw

以上、Githubが8.9Kstarsに達した最高のモデルインタプリタLIMEの詳細です、モデルインタプリタLIMEの詳細については、スクリプトハウスの他の関連記事に注意してください!。