こちらの続編的内容です。回帰問題をAutoMLで解いてみます。
無料のCommunity Editionへのサインアップの手順についてはこちらを参考にしてください。また、フルバージョンのDatabricksとの違いに関しては、こちらを参照ください。
以下の手順では、すでにワークスペースへのログインまで完了していることを前提としています。
注意
Community EditionではPythonノートブックからのAutoMLの実行は可能ですが、GUIでのAutoMLはサポートされていません。GUIでのAutoMLのウォークスルーに関しては、こちらを参照ください。
回帰問題を解いてみる
注意
Databricks Community Editionでは一度停止したクラスターを再度起動することはできません。再度クラスターを作成してください。
ノートブックのインポート手順とクラスターの作成手順はこちらを参考にしてください。
回帰問題のサンプルノートブックはこちらに置いてあります。
インポート時のURLはこちらです。
https://raw.githubusercontent.com/taka-yayoi/public_repo/main/AutoML_regression/Databricks%20AutoML%E5%9B%9E%E5%B8%B0%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%83%8E%E3%83%BC%E3%83%88%E3%83%96%E3%83%83%E3%82%AF.py
ノートブックがインポートされ、クラスターが起動すると以下のような状態になっているはずです。
カルフォルニア住宅データセット
このデータセットは1990年のアメリカの国勢調査から作成されたものです。一行が国勢調査のブロックグループとなります。目的変数はカルフォルニアの地域における住宅価格の中央値です。
import sklearn
input_pdf = sklearn.datasets.fetch_california_housing(as_frame=True)
display(input_pdf.frame)
一番右にあるMedHouseVal
が目的変数となる住宅価格の中央値です。
トレーニングデータセットとテストデータセットの分割
from sklearn.model_selection import train_test_split
train_pdf, test_pdf = train_test_split(input_pdf.frame, test_size=0.01, random_state=42)
display(train_pdf)
トレーニング
以下のコマンドでAutoMLを実行します。モデルが予測すべき目的変数を、引数target_col
で指定する必要があります。実行が完了すると、トレーニングでベストなモデルを生成したノートブックにアクセスして、コードを確認することができます。このノートブックには特徴量の重要度のグラフも含まれています。
from databricks import automl
summary = automl.regress(train_pdf, target_col="MedHouseVal", timeout_minutes=30)
上のコマンドを実行すると、分類問題の時と同じように大量のモデルが生成され、それら全てがMLflowによって記録されていきます。
トレーニングが完了するとデータ探索用のノートブック(data exploration notebook)、ベストモデルのノートブック(best trial notebook)、MLflowエクスペリメント(MLflow experiment)へのリンクが表示されます。
今回は130のモデルがトレーニングされました。
推論
新たなデータを用いて予測を行う際に、AutoMLでトレーニングしたモデルを活用することが可能です。以下の例では、pandasデータフレームのデータに対してどのように予測を行うのか、Sparkデータフレームに対して予測を行うために、モデルをどのようにSparkのUDF(ユーザー定義関数)として登録するのかをデモします。
pandasデータフレーム
summary.best_trial
でベストなモデルにアクセスすることができます。
model_uri = summary.best_trial.model_path
呼び出したベストモデルを用いて推論を行います。
import mlflow
# テストデータセットの準備
y_test = test_pdf["MedHouseVal"]
X_test = test_pdf.drop("MedHouseVal", axis=1)
# ベストモデルによる推論の実行
model = mlflow.pyfunc.load_model(model_uri)
predictions = model.predict(X_test)
test_pdf["MedHouseVal_predicted"] = predictions
display(test_pdf)
推論結果がMedHouseVal_predicted
として得られます。
Sparkデータフレーム
Sparkデータフレームに対しても同様に推論を行うことができます。
# テストデータセットの準備
test_df = spark.createDataFrame(test_pdf)
predict_udf = mlflow.pyfunc.spark_udf(spark, model_uri=model_uri)
display(test_df.withColumn("MedHouseVal_predicted", predict_udf()))
テスト
実運用環境において、最終的なベストモデルがどれだけの性能を発揮するのかを見積もるために、ホールドアウトしておいたテストセットで予測を行います。
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
# データセットの準備
y_pred = test_pdf["MedHouseVal_predicted"]
test = pd.DataFrame({"Predicted":y_pred,"Actual":y_test})
test = test.reset_index()
test = test.drop(["index"], axis=1)
# グラフのプロット
fig= plt.figure(figsize=(16,8))
plt.plot(test[:50])
plt.legend(["Actual", "Predicted"])
sns.jointplot(x="Actual", y="Predicted", data=test, kind="reg");
まとめ
こちらでは、すぐにでも試せるCommunity EditionでのAutoMLを体験いただきました。Databricks AutoMLはGUIもサポートしていますが、それよりも重要なのは中身の処理が全てわかるようになっているガラスボックスアプローチであると考えています。これには以下のメリットがあります。
- 機械学習プロジェクトにおけるベースラインモデルをクイックに構築し、以降のカスタマイズを容易に行えます。
- いわゆるシチズンデータサイエンティストとプロフェッショナルデータサイエンティストのコラボレーションも円滑に行えるようになります(シチズンデータサイエンティストがビジネス知識を活かしてベースラインモデルを構築し、プロフェッショナルデータサイエンティストがチューニングを行う等)。
この他、Databricksでの機械学習に興味がある方はこちらの記事もご覧になってください。
- Databricks AutoMLのご紹介 : 機械学習開発の自動化に対するガラスボックスアプローチ
- Databricks AutoMLのマニュアル
- あなたの機械学習プロジェクトをDatabricks AutoMLでスーパーチャージしましょう
- Databricks機械学習ガイド
- Databricksにおける機械学習チュートリアル
- Databricksで機械学習を始めてみる
- 機械学習エンジニアとしてDatabricksを使い始める
- Databricksにおける機械学習モデル構築のエンドツーエンドのサンプル