🤖
【20日目】AutoGluonでAutoMLをやってみる【2021アドベントカレンダー】
2021年1人アドベントカレンダー(機械学習)、20日目の記事になります。
テーマは AutoML になります。
AWS製の AutoGluon を扱います。
今回はテーブルデータを扱いますが、テーブルデータだけでなく、テキストや画像にも使えるようです。
Colab のコードはこちら
前処理
目的変数にNull値があっても学習・予測できるが、評価時にエラーが出るのでNull値を補完します
df["Global_Sales"] = df["Global_Sales"].fillna(df["Global_Sales"].mean())
train, test = train_test_split(
df.drop(["NA_Sales", "PAL_Sales", "JP_Sales", "Other_Sales"], axis=1),
test_size=0.3,
shuffle=True,
random_state=SEED
)
AutoGluon で学習・推論
gkf = GroupKFold(n_splits=5)
groups = train["Genre"]
cv_result_gln_eval = []
for i, (train_index, test_index) in enumerate(gkf.split(train, train, groups)):
train_gkf, test_gkf = train.iloc[train_index], train.iloc[test_index]
print(f"Fold {i}")
model = TabularPredictor(
label = "Global_Sales", # 目的変数
problem_type = "regression", # 回帰を指定
eval_metric = "root_mean_squared_error", # 評価指標
verbosity = 0, # ログの非表示
)
# 学習
model.fit(
train_data=train_gkf,
ag_args_fit={'num_gpus': 1}, # GPUの使用
time_limit = 30, # 学習時間の上限
)
# 予測
y_pred = model.predict(test_gkf.drop(["Global_Sales"], axis=1))
# AutoGluon の解釈性機能
print("特徴量の重要度")
feature_importance_df = model.feature_importance(
test_gkf,
silent = True
)
display(feature_importance_df)
# 特徴量の重要度をグラフ表示
plt.figure(figsize=(12, 8))
plt.title(f"Fold {i} 特徴量の重要度")
plt.xlabel("重要度")
plt.ylabel("特徴量")
plt.barh(
feature_importance_df.index,
feature_importance_df["importance"],
)
plt.show()
print()
# AutoGluon の機能
print("リーダーボード")
display(
model.leaderboard(
test_gkf,
silent = True
)
)
print()
# AutoGluon の評価機能
score = model.evaluate_predictions(y_true=test_gkf["Global_Sales"], y_pred=y_pred)
rmse_gln_eval = score['root_mean_squared_error']
cv_result_gln_eval.append(rmse_gln_eval)
print("RMSE:", round(np.mean(cv_result_skl_eval), 3))
出力:
RMSE: 0.135
20日目は以上になります、最後までお読みいただきありがとうございました。
参考サイト
Discussion