LoginSignup
17
21

More than 1 year has passed since last update.

AutoML(AutoKeras)を使ってみた

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

はじめに

最近、AutoML 関係のライブラリーやツールが世の中に多く普及し始めているなと認識し、手探りで調べております。
過去に他のAutoML ライブラリーやツールについては、別の記事に纏めておりますので下記をご参照ください。

AutoKeras を使ってみた

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

pip install autokeras

tensorflow もバッググラウンドで使用するため、インストールされていない方はtensorflow も別途必要になります。

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

import pandas as pd
import matplotlib.pyplot as plt
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

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

import tensorflow as tf
import autokeras as ak

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

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

# ランダムシード値
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,
)

df_train = pd.concat([x_train, y_train], axis=1)
df_test = pd.concat([x_test, y_test], axis=1)

feature_names = boston.feature_names
label_name = ["MEDV"]

下記でモデルを学習します。

reg = ak.StructuredDataRegressor(
    overwrite=True,
    max_trials=10,  # It tries 10 different models.
    )

reg.fit(
    x=df_train[feature_names],
    y=df_train[label_name],
    validation_split=0.2,
    )

最適モデルは下記で出力できます。

model = reg.export_model()
model.summary()

出力結果は下記のような感じです。

Model: "model"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
input_1 (InputLayer)         [(None, 13)]              0         
_________________________________________________________________
multi_category_encoding (Mul (None, 13)                0         
_________________________________________________________________
normalization (Normalization (None, 13)                27        
_________________________________________________________________
dense (Dense)                (None, 1024)              14336     
_________________________________________________________________
re_lu (ReLU)                 (None, 1024)              0         
_________________________________________________________________
dense_1 (Dense)              (None, 32)                32800     
_________________________________________________________________
re_lu_1 (ReLU)               (None, 32)                0         
_________________________________________________________________
regression_head_1 (Dense)    (None, 1)                 33        
=================================================================
Total params: 47,196
Trainable params: 47,169
Non-trainable params: 27
_________________________________________________________________

tf.keras.Model なので、使い回しは比較的便利なのかなと思います。

次にテストデータに対して予測します。

y_pred = reg.predict(x=df_test[feature_names])

# 評価
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.876561  2.873366  12.909305  3.592952

AutoKeras を使ってみた感想としては、実装は簡単でした。
ただ、学習は時間がかかりますね。パラメータで調整はできるので、必要に応じて調整するという感じでしょうか。

さいごに

最後まで読んで頂き、ありがとうございました。

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

17
21
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
17
21