DatabricksでRからMLflowを活用する

こちらのサンプルノートブックをウォークスルーします。

https://docs.databricks.com/mlflow/quick-start-r.html

翻訳版のノートブックはこちらです。

https://github.com/taka-yayoi/public_repo_2/blob/master/r_mlflow/MLflow%20quickstart%20(R).r

# MLflowクイックスタート: トラッキング

このノートブックでは、シンプルなデータセットに対してランダムフォレストモデルを作成し、モデル、選択されたパラメーター、評価メトリクス、その他のアーティファクトを記録するためにMlflowトラッキングAPIを使用します。

## ライブラリのインストール

このノートブックでは分散処理を行いませんので、ドライバーノードのみにパッケージをインストールするために、Rの`install.packages()`関数を使うことができます。

分散処理の利点を活用するには、クラスターライブラリを作成することで、クラスターの全ノードにパッケージをインストールする必要があります。

https://qiita.com/taka_yayoi/items/9407356caadea3dfb47c

```r:R
install.packages("mlflow")
```

```r:R
library(mlflow)
```

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

必要なライブラリをインポートします。

このノートブックでは、あとでモデルをロードし直せる様に、トレーニングしたモデルのpredictメソッドをシリアライズするために、Rライブラリの`carrier`を使用します。詳細に関しては、[`carrier` github repo](https://github.com/r-lib/carrier)をご覧ください。

```r:R
install.packages("carrier")
install.packages("e1071")

library(MASS)
library(caret)
library(e1071)
library(randomForest)
library(SparkR)
library(carrier)
```

## トレーニングおよびトラッキング

```r:R
with(mlflow_start_run(), {
  
  # モデルパラメーターの設定
  ntree <- 100
  mtry <- 3
  
  # モデルの作成およびトレーニング
  rf <- randomForest(type ~ ., data=Pima.tr, ntree=ntree, mtry=mtry)
  
  # テストデータセットに対する予測にモデルを使用
  pred <- predict(rf, newdata=Pima.te[,1:7])
  
  # このランで使用されたモデルパラメーターを記録
  mlflow_log_param("ntree", ntree)
  mlflow_log_param("mtry", mtry)
  
  # モデルを評価するためのメトリクスの定義
  cm <- confusionMatrix(pred, reference = Pima.te[,8])
  sensitivity <- cm[["byClass"]]["Sensitivity"]
  specificity <- cm[["byClass"]]["Specificity"]
  
  # メトリクスの値を記録 
  mlflow_log_metric("sensitivity", sensitivity)
  mlflow_log_metric("specificity", specificity)
  
  # モデルの記録
  # 関数としてモデルを格納するRパッケージ "carrier" の crate() 関数  
  predictor <- crate(function(x) predict(rf,.x))
  mlflow_log_model(predictor, "model")     
  
  # コンフュージョンマトリクス(混同行列)の作成およびプロット
  png(filename="confusion_matrix_plot.png")
  barplot(as.matrix(cm), main="Results",
         xlab="Observed", ylim=c(0,200), col=c("green","blue"),
         legend=rownames(cm), beside=TRUE)
  dev.off()
  
  # アーティファクトとしてプロットを保存
  mlflow_log_artifact("confusion_matrix_plot.png") 
})
```

## トラッキング結果の確認

結果を参照するには、このページの右上にあるフラスコアイコンをクリックします。エクスペリメントのサイドバーが表示されます。エクスペリメントのサイドバーには、このノートブックにおけるそれぞれのランのパラメーターとメトリクスが表示されます。最新のランを表示する様にするには円形の矢印アイコンをクリックします。
![Screen Shot 2022-12-07 at 16.15.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/150dd864-f3d4-bb8f-fe47-229c0a679018.png)

ランダムに割り当てられたランの名称(`skillfull-bat-xxx`など)をクリックすると、ランのページが新規タブに表示されます。このページでは、ランとして記録されたすべての情報を確認することができます。記録されたモデルやプロットを参照するために、アーティファクトセクションまで下にスクロールします。
![Screen Shot 2022-12-07 at 16.16.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/df11328e-6f8a-d522-7cf9-2bee02764751.png)
![Screen Shot 2022-12-07 at 16.16.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/7aa5a49f-c47f-1c63-4b2f-ed354162d719.png)

詳細に関しては、"View notebook experiment" ([AWS](https://docs.databricks.com/applications/mlflow/tracking.html#view-notebook-experiment)|[Azure](https://docs.microsoft.com/azure/databricks/applications/mlflow/tracking#view-notebook-experiment)|[GCP](https://docs.gcp.databricks.com/applications/mlflow/tracking.html#view-notebook-experiment))をご覧ください。

# まとめ

DatabricksではPythonだけではなく、Rを活用して機械学習モデルをトレーニングして、MLflowを用いてトラッキングすることもできます。Rを得意とされる方も是非試してみてください！

### Databricks 無料トライアル

[Databricks 無料トライアル](https://databricks.com/jp/try-databricks)