1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Databricks Community EditionでAutoMLを使って回帰問題を解いてみる

Last updated at Posted at 2022-08-14

こちらの続編的内容です。回帰問題をAutoMLで解いてみます。

無料のCommunity Editionへのサインアップの手順についてはこちらを参考にしてください。また、フルバージョンのDatabricksとの違いに関しては、こちらを参照ください。

以下の手順では、すでにワークスペースへのログインまで完了していることを前提としています。
Screen Shot 2022-08-14 at 10.50.32.png

注意
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

ノートブックがインポートされ、クラスターが起動すると以下のような状態になっているはずです。
Screen Shot 2022-08-14 at 16.20.47.png

カルフォルニア住宅データセット

このデータセットは1990年のアメリカの国勢調査から作成されたものです。一行が国勢調査のブロックグループとなります。目的変数はカルフォルニアの地域における住宅価格の中央値です。

Python
import sklearn
input_pdf = sklearn.datasets.fetch_california_housing(as_frame=True)
display(input_pdf.frame)

一番右にあるMedHouseValが目的変数となる住宅価格の中央値です。
Screen Shot 2022-08-14 at 16.21.27.png

トレーニングデータセットとテストデータセットの分割

Python
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で指定する必要があります。実行が完了すると、トレーニングでベストなモデルを生成したノートブックにアクセスして、コードを確認することができます。このノートブックには特徴量の重要度のグラフも含まれています。

Python
from databricks import automl
summary = automl.regress(train_pdf, target_col="MedHouseVal", timeout_minutes=30)

上のコマンドを実行すると、分類問題の時と同じように大量のモデルが生成され、それら全てがMLflowによって記録されていきます。
Screen Shot 2022-08-14 at 16.26.26.png

エクスペリメントページで詳細を確認することもできます。
Screen Shot 2022-08-14 at 16.27.59.png

トレーニングが完了するとデータ探索用のノートブック(data exploration notebook)、ベストモデルのノートブック(best trial notebook)、MLflowエクスペリメント(MLflow experiment)へのリンクが表示されます。
Screen Shot 2022-08-14 at 16.54.00.png
今回は130のモデルがトレーニングされました。
Screen Shot 2022-08-14 at 16.56.04.png

推論

新たなデータを用いて予測を行う際に、AutoMLでトレーニングしたモデルを活用することが可能です。以下の例では、pandasデータフレームのデータに対してどのように予測を行うのか、Sparkデータフレームに対して予測を行うために、モデルをどのようにSparkのUDF(ユーザー定義関数)として登録するのかをデモします。

pandasデータフレーム

summary.best_trialでベストなモデルにアクセスすることができます。

Python
model_uri = summary.best_trial.model_path

呼び出したベストモデルを用いて推論を行います。

Python
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として得られます。
Screen Shot 2022-08-14 at 16.59.32.png

Sparkデータフレーム

Sparkデータフレームに対しても同様に推論を行うことができます。

Python
# テストデータセットの準備
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()))

Screen Shot 2022-08-14 at 17.01.53.png

テスト

実運用環境において、最終的なベストモデルがどれだけの性能を発揮するのかを見積もるために、ホールドアウトしておいたテストセットで予測を行います。

Python
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");

Screen Shot 2022-08-14 at 17.04.11.png
Screen Shot 2022-08-14 at 17.04.21.png

まとめ

こちらでは、すぐにでも試せるCommunity EditionでのAutoMLを体験いただきました。Databricks AutoMLはGUIもサポートしていますが、それよりも重要なのは中身の処理が全てわかるようになっているガラスボックスアプローチであると考えています。これには以下のメリットがあります。

  • 機械学習プロジェクトにおけるベースラインモデルをクイックに構築し、以降のカスタマイズを容易に行えます。
  • いわゆるシチズンデータサイエンティストとプロフェッショナルデータサイエンティストのコラボレーションも円滑に行えるようになります(シチズンデータサイエンティストがビジネス知識を活かしてベースラインモデルを構築し、プロフェッショナルデータサイエンティストがチューニングを行う等)。

前のシリーズでは分類問題時系列予測問題を解いています。

この他、Databricksでの機械学習に興味がある方はこちらの記事もご覧になってください。

Databricks 無料トライアル

Databricks 無料トライアル

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?