乙Py先生のプログラミング教室
初学者のためのプログラミング学習サイト

AutoML

今回はたった2行で
機械学習の精度検証が出来ちゃう
Lazypredictを試してみました

解説動画はこちら


このライブラリは
機械学習用のモデルを自動作成して
複数のモデルを比較してくれます

これがgithubです
Lazypredict

ドキュメントとしては
それほど情報量が多くないようです

コードなどもシンプルで
かなり使いやすい印象ですね


GoogleColabで動かせるので
使いたい方はコードを参考にしてみてください。

まず最初はライブラリのインストールです
# ライブラリのインストール
pip install lazypredict
30秒くらいでインストールも終わります。

GoogleColabなら追加のインストールが
無くても動くと思います。

このライブラリは
数値を予測する回帰モデルと
種別を予測する判別モデル
2種類の機械学習モデルの比較を行えます



最初は判別モデルをみてみましょう
データはscikit-learnのデータセットを使います

load_wine
ワインの品種に関するデータセットで
14列178個のデータがあり
3クラス分類で予測します


説明変数
alcohol アルコール濃度
malic_acid リンゴ酸
ash 灰
alcalinity_of_ash 灰のアルカリ成分
magnesium マグネシウム
total_phenols 総フェノール類量
flavanoids フラボノイド(ポリフェノールらしい)
nonflavanoid_phenols 非フラボノイドフェノール類
proanthocyanins プロアントシアニジン(ポリフェノールの一種らしい)
color_intensity 色の強さ
hue 色合い
od280/od315_of_diluted_wines ワインの希釈度合い
proline プロリン(アミノ酸の一種らしい)

目的変数
ワインの品種

こんな感じのデータです
読み込みのコードはこちら
from sklearn import datasets
import pandas as pd
df = datasets.load_wine(as_frame=True).frame

print('行列数 : ' , df.shape)
print('ターゲットの種別数 : ' , df['target'].nunique())
df.head()

これでデータが用意できたので
次は学習データの分割です
トレーニング7 , テストサイズ3で分割します
# 学習データの分割
from sklearn.model_selection import train_test_split
X = df.iloc[0: , 0:-1]
Y = df['target']

# トレーニング7 , テストサイズ3で分割
x_train, x_test, y_train, y_test = train_test_split(X , Y , test_size=0.3 , random_state=0)
x_train.shape, x_test.shape, y_train.shape, y_test.shape
((124, 13), (54, 13), (124,), (54,))


最後にlazypredictで
予測モデルの作成です

分類モデルを複数自動で生成し
その精度検証の結果と
予測結果を出してくれます

モデルの作成、検証部分は2行でいけます
分類モデルの検証はLazyClassifierを使います
# lazypredictのインポート
import lazypredict
# 回帰予測
#from lazypredict.Supervised import LazyRegressor
# 分類問題
from lazypredict.Supervised import LazyClassifier

# 予測モデルの作成(たったの2行だけ)
clf = LazyClassifier(verbose=1,ignore_warnings=True,predictions=True)
models , predictions = clf.fit(x_train , x_test , y_train , y_test)

最後の行の変数
models , predictions
に精度検証の結果と
予測結果が格納される仕組みです


作成した予測モデルの比較を見てみましょう

# モデルの比較
models
スクリーンショット 2022-10-01 16.01.17

こんな感じで予測モデルを一気に検証してくれます


テストデータの予測結果も見てみましょう
# テストデータ で予測
predictions
スクリーンショット 2022-10-01 16.02.36

列方向は各モデルで
行がテストデータです


回帰モデルも同様に試してみましょう

load_boston
ボストン住宅価格のデータです
from sklearn import datasets
import pandas as pd

data = datasets.load_boston()
boston_df = pd.DataFrame(data=data["data"] , columns=data["feature_names"])
boston_df['MEDV'] = data["target"]

print('行列数 : ' , boston_df.shape)
print('ターゲットの平均値 : ' , boston_df['MEDV'].mean())
boston_df.head()

学習データの分割も同様です
# 学習データの分割
from sklearn.model_selection import train_test_split
X = boston_df.iloc[0: , 0:-1]
Y = boston_df['MEDV']

# トレーニング7 , テストサイズ3で分割
x_train, x_test, y_train, y_test = train_test_split(X , Y , test_size=0.3 , random_state=0)
x_train.shape, x_test.shape, y_train.shape, y_test.shape
回帰モデルの検証も2行でいけますが
回帰の場合はLazyRegressorを使用します

# lazypredictのインポート
import lazypredict
# 回帰予測
from lazypredict.Supervised import LazyRegressor
# 分類問題
#from lazypredict.Supervised import LazyClassifier

# 予測モデルの作成(たったの2行だけ)
reg = LazyRegressor(verbose=1,ignore_warnings=True,predictions=True)
models , predictions = reg.fit(x_train , x_test , y_train , y_test)
# モデルの比較
models
スクリーンショット 2022-10-01 15.42.01

こんな感じの結果になりました



まとめ


データを突っ込めばどの手法の精度が高くなるのかを
結構な速さで出してくれるので
初めて予測モデルを作るデータには
最適かもしれません


AutoMLで似たようなものに
PyCaretというのが有りますが
Lazypredictの方がバグが出なくて
良いかもしれないなーと思いました

検証をパパッとやりたい方には
かなり良いライブラリかと思いますので
試したい方はコードを参考にしていただければと思います

それでは

今回は機械学習の自動化が出来るかもしれない
ライブラリを使ってみました。

解説動画はこちら



今回使用するのは
PyCaretというライブラリです。


これはPythonで実装された
オープンソースの機械学習ライブラリーで
機械学習の一連の作業を自動化する
「AutoML」をサポートしています。

つまり
数行で機械学習のコードを
代替できてしまう優れものです。

利用するためには
あらかじめインストールされている必要があります。

pip install pycaret


それでは早速サンプルコード見ていきましょう。


ボストンの住宅価格のデータで
検証してみることにします。

目的変数は
medv : 住宅価格
になります。

最初にライブラリ群を読み込みします。
データもPyCaretの中から読み込みます。

# ライブラリの読み込み
import pandas as pd
from pycaret.regression import *
from pycaret.datasets import get_data
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_absolute_error

boston_data = get_data('boston')
train, test = train_test_split(boston_data)

次にセットアップです。
ここではデータと目的変数を指定します。
# セットアップ
#データと目的変数を指定する
exp1 = setup(data = train , target = 'medv', ignore_features = None, session_id=1)
たったこれだけで、データの検証が終わってしまいます。
スクリーンショット 2021-12-11 16.48.38



これが終わったら次は
モデルの精度を比較します。

# モデルを比較する
compare_models()
スクリーンショット 2021-12-11 16.48.53
1行実行するだけで複数のモデルを比較して
結果を出してくれます。

今回は回帰のモデルで比較を行いましたが
一番良いのは「et」(Extra Trees Regressor)
というモデルでした。

これを使ってみることにしましょう。
# 精度の良さそうなやつでモデルを作ってみる
model = create_model('モデルのラベル')
スクリーンショット 2021-12-11 16.48.59


クロスバリデーションも自動で行ってくれてるようです。
次はパラメータをチューニングしてみましょう。

これも1行で出来てしまいます。

# モデルのチューニングを行う
tuned_model = tune_model(model , optimize = 'MAE')
スクリーンショット 2021-12-11 16.49.05

パラメータチューニングをした方が
やや精度が落ちている気がしますが
気にしないことにしましょう。

これでモデル作りは終わりなので
形にします。

# 最終的なモデルを作る
final_model = finalize_model(tuned_model)
final_model
スクリーンショット 2021-12-11 16.49.11

はい、モデルが出来上がりました。
早くてあっとゆーまでした。

モデルの評価部分も自動でたくさんの
評価軸を出してくれます。

# モデルの評価
evaluate_model(tuned_model)
スクリーンショット 2021-12-11 16.49.18

UIでいろいろ指標を変更できるようです。

最後にテストデータでの検証を見てみましょう。

#テストデータで検証
result = predict_model(final_model, data = test)
y_true = result['medv']
y_pred = result['Label']

mean_absolute_error(y_true, y_pred)
3.2223362928049464

パラメータチューニングの結果と
遜色ない結果となりました。

さらにアンサンブル学習のモデルを作るのも
簡単です。
モデルを指定したのを引数に加えるだけです。

# アンサンブル学習
model1 = create_model('gbr')
model2 = create_model('et')
model3 = create_model('lightgbm')
ensemble = blend_models([model1, model2,model3])
スクリーンショット 2021-12-11 16.49.30

これもなかなか精度が良さそうな結果になっています。

複数のモデルを使った検証が
10行ほどのコードで出来てしまいます。

いやー
恐ろしい物ですねー


まとめ

あれ?これだけのコードで済むなら
機械学習エンジニア要らなくね?????
と思ってしまいました。

特にこれと似たようなサービスである
DataRobotさんはほぼほぼ要らなく無いですかねー

こういう便利なライブラリが出てくると
機械学習のモデルを作っているエンジニアって
めっちゃくちゃ価値が下がってきますね・・・

要らなくならないように、頑張らないと・・・・

ということで今回は
機械学習の自動化が出来ちゃう
PyCaretのご紹介でした。

それでは。

このページのトップヘ