ぺーぱーの日々

上機嫌でいること、夢中でいることを目標に、今日も色んなことに手を出します。

MENU

【機械学習・Eli5】「5歳児にでもわかるように教えてあげる」という名前の由来に惹かれて。

kaggleで勉強しているとeli5というライブラリを見かけました。

どうやら、「5歳児にでもわかるように説明して」というのが名前の由来らしく、とってもユニークで、人間らしくて、ぜひモノにすべく、実装してみました。

ELI5とは

一言で

機械学習モデルを解釈するライブラリ

「解釈する」とは
  • どの特徴が重要か
  • どれくらい重要か

を考えて、理解する。

そもそも「モデル」って?

入力データを基に、結果を導き出す仕組み

つまりELI5とは

どんな仕組みかを解釈して、

5歳児にでもわかるように教えてくれるライブラリ(機能)

アウトプットイメージ

「このモデルはね、

●が一番重要な特徴量で、

▲がその次に重要な特徴量で、

●は予測に~~ぐらいの重要度を持っているよ。」的な感じと予想。

先にアウトプットを確認

https://www.kaggle.com/code/lopuhin/eli5-for-mercari
キーワードから内容を類推

Wight・・・重み(特徴量の重要度)

Feature・・・特徴量(予測に必要な要素)

ELI5を実装

目的

ボストン住宅価格データセットから住宅価格を予測

得たい結果
  • どの特徴量が予測に重要なのか
  • 各特徴量はどれくらい重要なのか
実装方針

学習モデルは、線形回帰

実装コード
# eli5をインストール
!pip install eli5

# 線形回帰
from sklearn.datasets import load_boston
boston = load_boston()
#説明変数
X_array = boston.data
#目的変数
y_array = boston.target


# scikit-learnの準備
from sklearn.model_selection import train_test_split
# 訓練データとテストデータに8:2で分割
X_train, X_test, y_train, y_test = train_test_split(X_array, y_array, test_size=0.2, random_state=0)

# 線形回帰で学習
from sklearn import linear_model
model = linear_model.LinearRegression()
model.fit(X_train, y_train)

# 訓練データを用いた評価
print(model.score(X_train, y_train))
# テストデータを用いた評価
print(model.score(X_test, y_test))

# eli5を使ってモデルの特徴量を解釈
from eli5 import show_weights

show_weights(model, feature_names=boston.feature_names)

# DataFrameを作成

from eli5.sklearn import explain_weights_sklearn
from eli5.formatters import format_as_dataframe, format_as_dataframes

explanation = explain_weights_sklearn(model, feature_names=boston.feature_names)

format_as_dataframe(explanation)

# 結果のテキスト作成

from eli5.formatters import format_as_text

print(format_as_text(explanation))
実行結果
予測精度
0.7730135569264234
0.5892223849182512
特徴量と重要度の一覧

特徴量と重要度の一覧(Dataframe)

特徴量と重要度の一覧(テキスト)
Explained as: linear model

Features with largest coefficients.
Caveats:
1. Be careful with features which are not
independent - weights don't show their importance.
2. If scale of input features is different then scale of coefficients
will also be different, making direct comparison between coefficient values
incorrect.
3. Depending on regularization, rare features sometimes may have high
coefficients; this doesn't mean they contribute much to the
classification result for most examples.

'y' top features
Weight Feature
------- -------
+38.092 <BIAS>
+3.709 RM
+2.341 CHAS
+0.244 RAD
+0.045 ZN
+0.008 B
+0.005 INDUS
-0.003 AGE
-0.011 TAX
-0.119 CRIM
-0.493 LSTAT
-1.046 PTRATIO
-1.386 DIS
-16.124 NOX

まとめ

 5歳児にでもわかるかわからないが、少なくとも5歳児並みの数学力の持ち主である僕にでもわかるように説明してくれるような親切設計だと思った。

 こんな風に人間の言葉で出力結果を説明してくれるような機能があることがわかると、これからもなんとか機械学習やれるかも!と思える。

 とはいいつつも、コンピューターくんの言語をしっかりと理解できるように自分自身をアップデートしていきたい。

参考サイト

eli5でモデルの解釈 – S-Analysis

https://www.kaggle.com/code/lopuhin/eli5-for-mercari

 

このエントリーをはてなブックマークに追加