Fabric の AutoML (プレビュー)
AutoML (自動マシン ラーニング) は、機械学習モデルのトレーニングと最適化を自動化する方法とツールのコレクションであり、人間の関与はほとんどありません。 AutoML の目的は、特定のデータセットに最適な機械学習モデルとハイパーパラメーターを選択するプロセスを簡素化し、高速化することです。通常、このプロセスには多くのスキルとコンピューティング能力が必要です。
重要
この機能はプレビュー中です。
Fabric では、データ サイエンティストは、機械学習タスクを自動化するために flaml.AutoML
を使用できます。
AutoML は、さまざまなセクターの ML 専門家や開発者が以下を行うのに役立ちます。
- 最小限のコーディングで ML ソリューションを構築する
- 時間とコストを削減する
- データ サイエンスのベスト プラクティスを適用する
- 迅速かつ効率的に問題を解決する
AutoML ワークフロー
flaml.AutoML
は、タスクに基づく AutoML のクラスです。 通常の適合メソッドと予測メソッドを使用して、Scikit-learn スタイルの推定器として使用できます。
AutoML 試用版を開始するには、ユーザーはトレーニング データとタスクの種類のみを指定する必要があります。 Fabric の統合された MLflow エクスペリエンスを使用すると、ユーザーは試用版で試行されたさまざまな実行を調べて、最終的なモデルがどのように選択されたかを確認することもできます。
トレーニング データ
Fabric では、ユーザーは次の入力の種類を AutoML fit
関数に渡すことができます。
Numpy 配列: 入力データが Numpy 配列に格納されると、X_train および y_train として
fit()
に渡されます。Pandas データフレーム: 入力データが Pandas データフレームに格納されると、X_trainとy_trainとして、またはデータフレームとラベルとして
fit()
に渡されます。Pandas on Spark データフレーム: 入力データが Spark データフレームとして格納されると、そのデータは、
Pandas
を使用してSpark
onto_pandas_on_spark()
データフレームに変換することができ、データフレームとラベルとしてfit()
に渡すことができます。from flaml.automl.spark.utils import to_pandas_on_spark psdf = to_pandas_on_spark(sdf) automl.fit(dataframe=psdf, label='Bankrupt?', isUnbalance=True, **settings)
機械学習の問題
ユーザーは、task
引数を使用して機械学習タスクを指定できます。 次のようなさまざまな機械学習タスクがサポートされています。
- 分類: 分類モデルの主な目的は、トレーニング データから学習した知識に基づいて、新しいデータがどのカテゴリに分類されるかを予測することです。 一般的な分類の例には、不正行為の検出、手書き認識、オブジェクトの検出などがあります。
- 回帰: 回帰モデルは、独立した予測子に基づいて数値の出力値を予測します。 回帰の目的は、1 つの変数が他の変数にどのように影響するかを推定することによって、独立した予測変数間の関係を確立することです。 たとえば、自動車の価格は、燃費効率や安全性の評価などの特徴量に基づきます。
- 時系列予測: これは、時間順に並べ替えられた履歴データ ポイントに基づいて将来の値を予測するために使用されます。 時系列では、日単位、週単位、月単位、年単位など、特定の期間にわたって一定の間隔でデータが収集および記録されます。 時系列予測の目的は、データ内のパターン、傾向、季節性を特定し、この情報を使用して将来の価値に関する予測を行うことです。
FLAML でサポートされているその他のタスクの詳細については、FLAML での AutoML タスクに関するドキュメントを参照してください。
省略可能な入力
AutoML 試用版を構成するためのさまざまな制約と入力を提供します。
制約
AutoML 試用版を作成する場合、ユーザーは、AutoML プロセスの制約、潜在的な推定器のコンストラクター引数、AutoML で試行されたモデルの種類、および AutoML 試用版のメトリックに対する制約を構成することもできます。
たとえば、次のコードを使用すると、ユーザーは AutoML 試用版でメトリックの制約を指定できます。
metric_constraints = [("train_loss", "<=", 0.1), ("val_loss", "<=", 0.1)]
automl.fit(X_train, y_train, max_iter=100, train_time_limit=1, metric_constraints=metric_constraints)
これらの構成の詳細については、FLAML の構成に関するドキュメントを参照してください。
最適化メトリック
トレーニング中に、AutoML 関数は多くの試用版を作成し、さまざまなアルゴリズムとパラメーターを試します。 AutoML ツールは、ML アルゴリズムとハイパーパラメーターを反復処理します。 このプロセスでは、イテレーションごとにトレーニング スコアを持つモデルが作成されます。 最適化するメトリックのスコアが高いほど、モデルはデータに "適合している" と見なされます。 最適化メトリックは metric
引数を使用して指定されます。 組み込みのメトリックを参照する文字列またはユーザー定義関数のいずれかを指定できます。
並列チューニング
場合によっては、Apache Spark を使用してトレーニングを並列化することで、AutoML 試用版を迅速化することをお勧めします。 Spark クラスターの場合、既定では、FLAML は Executor ごとに 1 つの試用版を起動します。 n_concurrent_trials
引数を使用して、同時試行回数をカスタマイズすることもできます。
automl.fit(X_train, y_train, n_concurrent_trials=4, use_spark=True)
AutoML の軌跡を並列化する方法の詳細については、並列 Spark ジョブの FLAML ドキュメントを参照してください。
MLflow を使用した追跡
Fabric MLflow 統合を使用して、メトリック、パラメーター、探索された軌跡のメトリックをキャプチャすることもできます。
import mlflow
mlflow.autolog()
with mlflow.start_run(nested=True):
automl.fit(dataframe=pandas_df, label='Bankrupt?', mlflow_exp_name = "automl_spark_demo")
# You can also provide a run_name pre-fix for the child runs
automl_experiment = flaml.AutoML()
automl_settings = {
"metric": "r2",
"task": "regression",
"use_spark": True,
"mlflow_exp_name": "test_doc",
"estimator_list": [
"lgbm",
"rf",
"xgboost",
"extra_tree",
"xgb_limitdepth",
], # catboost does not yet support mlflow autologging
}
with mlflow.start_run(run_name=f"automl_spark_trials"):
automl_experiment.fit(X_train=train_x, y_train=train_y, **automl_settings)
サポートされているモデル
Fabric の AutoML では、次のモデルがサポートされています。
分類 | Regression (回帰) | 時系列予測 |
---|---|---|
(PySpark) 勾配ブースティング ツリー (GBT) 分類器 | (PySpark) 加速故障時間 (AFT) 生存回帰 | Arimax |
(PySpark) 線形 SVM | (PySpark) 一般化線形回帰 | AutoARIMA |
(PySpark) Naive Bayes | (PySpark) 勾配ブースティング ツリー (GBT) 回帰 | Average |
(Synapse) LightGBM | (PySpark) 線形回帰 | CatBoost |
CatBoost | (Synapse) LightGBM | デシジョン ツリー |
デシジョン ツリー | CatBoost | ExponentialSmoothing |
Extremely Randomized Trees | デシジョン ツリー | Extremely Randomized Trees |
勾配ブースティング | Elastic Net | ForecastTCN |
K ニアレスト ネイバー | Extremely Randomized Trees | 勾配ブースティング |
Light GBM | 勾配ブースティング | Holt-Winters 指数平滑法 |
Linear SVC | K ニアレスト ネイバー | K ニアレスト ネイバー |
ロジスティック回帰 | LARS Lasso | LARS Lasso |
L1/L2 正則化によるロジスティック回帰 | Light GBM | Light GBM |
Naive Bayes | L1/L2 正則化によるロジスティック回帰 | Naive |
ランダム フォレスト | ランダム フォレスト | 軌道 |
Spark 上のランダム フォレスト | Spark 上のランダム フォレスト | Prophet |
確率的勾配降下法 (SGD) | 確率的勾配降下法 (SGD) | ランダム フォレスト |
サポート ベクター分類 (SVC) | XGBoost | SARIMAX |
XGboost | 深度が制限された XGBoost | SeasonalAverage |
深度が制限された XGBoost | SeasonalNaive | |
テンポラル フュージョン トランスフォーマー | ||
XGBoost | ||
時系列の XGBoost | ||
時系列の深度が制限された XGBoost | ||
ElasticNet |
結果を視覚化する
この flaml.visualization
モジュールには、Plotly を使用して最適化プロセスをプロットするためのユーティリティ関数が用意されています。 Plotly を利用することで、ユーザーは AutoML の実験結果を対話的に調べることができます。 これらのプロット関数を使用するには、最適化された flaml.AutoML
または flaml.tune.tune.ExperimentAnalysis
オブジェクトを入力として指定します。
ノートブック内で次の関数を使用できます。
plot_optimization_history
:実験内のすべての試行の最適化履歴をプロットします。plot_feature_importance
: データセット内の各特徴の重要度をプロットします。plot_parallel_coordinate
: 実験内の高次元パラメーターのリレーションシップをプロットします。plot_contour
: 実験のコンター プロットとしてパラメーター リレーションシップをプロットします。plot_edf
:実験の目標値EDF(経験分布関数)をプロットします。plot_timeline
: 実験のタイムラインをプロットします。plot_slice
: スタディのスライス プロットとしてパラメータ リレーションシップをプロットします。plot_param_importance
:実験のハイパーパラメーターの重要度をプロットします。