eli5での文書分類モデルの解釈

目次

1. eli5の概要
1.1 eli5とは
1.2 eli5のライブラリ
2. 実験
2.1 データロード
2.2 SVCの分類分析
2.3 eli5のモデル解釈

1. eli5の概要

1.1 eli5とは

Eli5は「Explain Like I’m 5 (私が5歳だと思って説明して)」を略したスラングです。Eli5は統合されたものを使用してさまざまな機械学習モデルを解釈するPythonライブラリです。

 

1.2 eli5のライブラリ

対応機械学習ライブラリ:

scikit-learn

XGBoost

LightGBM

CatBoost

lightning

sklearn-crfsuite

Keras

 

2. 実験

環境:Google colab

データセット:20 Newsgroups:Usenet*1から収集した約20000文書、20カテゴリのデータセットです。

モデル:SVCの分類分析

モデル解釈:eli5のTextExplainer

 

ライブラリのインストール

!pip install eli5

2.1 データロード

Scikit-learnのデータセットから、20 Newsgroupsの学習とテストのデータセットを読み込みます。

from sklearn.datasets import fetch_20newsgroups

 

categories = [‘alt.atheism’, ‘soc.religion.christian’,

‘comp.graphics’, ‘sci.med’]

twenty_train = fetch_20newsgroups(

subset=’train’,

categories=categories,

shuffle=True,

random_state=42,

remove=(‘headers’, ‘footers’),

)

twenty_test = fetch_20newsgroups(

subset=’test’,

categories=categories,

shuffle=True,

random_state=42,

remove=(‘headers’, ‘footers’),

)

2.2 SVCの分類分析

SVMのモデルを学習して、モデルの精度を計算しました。0.89の精度を確認できました。

from sklearn.feature_extraction.text import TfidfVectorizer

from sklearn.svm import SVC

from sklearn.decomposition import TruncatedSVD

from sklearn.pipeline import Pipeline, make_pipeline

 

vec = TfidfVectorizer(min_df=3, stop_words=’english’,

ngram_range=(1, 2))

svd = TruncatedSVD(n_components=100, n_iter=7, random_state=42)

lsa = make_pipeline(vec, svd)

 

clf = SVC(C=150, gamma=2e-2, probability=True)

pipe = make_pipeline(lsa, clf)

pipe.fit(twenty_train.data, twenty_train.target)

pipe.score(twenty_test.data, twenty_test.target)

 

0.8901464713715047

 

モデルを推論します。一番目のニュースは0.99の信頼性でsci.medを予測しました。

def print_prediction(doc):

y_pred = pipe.predict_proba([doc])[0]

for target, prob in zip(twenty_train.target_names, y_pred):

print(“{:.3f} {}”.format(prob, target))

 

doc = twenty_test.data[0]

print_prediction(doc)

 

0.001 alt.atheism

0.001 comp.graphics

0.995 sci.med

0.004 soc.religion.christian

 

2.3 eli5のモデル解釈

上記の予測結果に対して、どう判断かeli5で解釈ができます。4つの分類に対して、緑色はポジティブの影響があります。赤色はネガの影響があります。どんな言葉で判断しましたことを解釈します。

担当者:HM

香川県高松市出身 データ分析にて、博士(理学)を取得後、自動車メーカー会社にてデータ分析に関わる。その後コンサルティングファームでデータ分析プロジェクトを歴任後独立 気が付けばデータ分析プロジェクトだけで50以上担当

理化学研究所にて研究員を拝命中 応用数理学会所属