LoginSignup
2
5

More than 1 year has passed since last update.

AutoML(EvalML)を使ってみた

Last updated at Posted at 2021-09-03
  • 製造業出身のデータサイエンティストがお送りする記事
  • 今回はAutoML ライブラリー(EvalML)を使ってみました。

はじめに

過去に他のAutoML ライブラリーやツールについては、別の記事に纏めておりますので下記をご参照ください。

EvalML とは

EvalML とは、Alteryx が開発しているAutoML ライブラリです。

EvalML を使ってみた

必要なライブラリーは下記です。

pip install evalml

今回もUCI Machine Learning Repositoryで公開されているボストン住宅の価格データを用いて実施します。

# ライブラリーのインポート
import os

import pandas as pd
import numpy as np

import seaborn as sns
import matplotlib.pyplot as plt

%matplotlib inline

# ボストンの住宅価格データ
from sklearn.datasets import load_boston

# 前処理
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split

# evalml
import evalml
from evalml import AutoMLSearch

# 評価指標
from sklearn.metrics import r2_score
from sklearn.metrics import mean_absolute_error
from sklearn.metrics import mean_squared_error

# データセットの読込み
boston = load_boston()

# 説明変数の格納
df = pd.DataFrame(boston.data, columns=boston.feature_names)
# 目的変数の追加
df["MEDV"] = boston.target

# データの中身を確認
df.head()

スクリーンショット 2020-11-09 20.33.13.png

次にデータセットを分割します(train, test)。

# ランダムシード値
RANDOM_STATE = 10

# 学習データと評価データの割合
TEST_SIZE = 0.2

# 学習データと評価データを作成
x_train, x_test, y_train, y_test = train_test_split(
    df.iloc[:, 0 : df.shape[1] - 1],
    df.iloc[:, df.shape[1] - 1],
    test_size=TEST_SIZE,
    random_state=RANDOM_STATE,
)

次にモデルの学習を行います。

automl = AutoMLSearch(
    X_train=x_train,
    y_train=y_train,
    problem_type="regression",
    objective="mae",
    additional_objectives=["R2", "mse"],
    max_time=120,
    random_seed=RANDOM_STATE,
    optimize_thresholds=True,
)
automl.search()

次に探索したモデルの一覧を確認します。

automl.rankings

スクリーンショット 2021-09-03 15.43.12.png

モデルの詳細は、下記コードで確認できます。

automl.describe_pipeline(automl.rankings.iloc[0]["id"])

スクリーンショット 2021-09-03 15.44.25.png

次に予測を行います。

# 推論
y_pred = best_model.predict(x_test)

# 評価
def calculate_scores(true, pred):
    """全ての評価指標を計算する

    Parameters
    ----------
    true (np.array)       : 実測値
    pred (np.array)       : 予測値

    Returns
    -------
    scores (pd.DataFrame) : 各評価指標を纏めた結果

    """
    scores = {}
    scores = pd.DataFrame(
        {
            "R2": r2_score(true, pred),
            "MAE": mean_absolute_error(true, pred),
            "MSE": mean_squared_error(true, pred),
            "RMSE": np.sqrt(mean_squared_error(true, pred)),
        },
        index=["scores"],
    )
    return scores


scores = calculate_scores(y_test, y_pred)
print(scores)

出力結果は下記のようになります。

              R2       MAE        MSE      RMSE
scores  0.875305  2.599936  13.040664  3.611186

さいごに

最後まで読んで頂き、ありがとうございました。
今回はEvalMLを使ってみました。

訂正要望がありましたら、ご連絡頂けますと幸いです。

2
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
5