共用方式為


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 DataFrame:當輸入資料儲存在 Pandas DataFrame 中時,會以 X_train 和 y_train 或 DataFrame 和標籤的形式傳遞至 fit()

  • Spark DataFrame 上的 Pandas:當輸入資料儲存為 Spark DataFrame 時,可以使用 to_pandas_on_spark() 將其轉換成 Spark DataFrame 上的 Pandas,然後以 DataFrame 和標籤的形式傳遞至 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 引數來指定機器學習工作。 有各種支援的機器學習工作,包括:

  • 分類:分類模型的主要目標,是根據從其訓練資料中的學習,來預測新資料將屬於哪些類別。 常見的分類範例包括詐騙偵測、手寫辨識和物件偵測。
  • 迴歸:迴歸模型會根據獨立的預測變數來預測數值輸出值。 在迴歸中,目標是藉由評估一個變數如何影響其他變數,來協助您建立那些獨立預測變數之間的關聯性。 例如,汽車價格以油耗、安全等級等特徵為基礎。
  • 時間序列預測:這是用來根據依時間排序的歷程記錄資料點來預測未來值。 在時間序列中,會在特定期間定期收集並記錄資料,例如每日、每週、每月或每年。 時間序列預測的目標是要識別資料的模式、趨勢和季節性,然後使用此資訊來預測未來價值。

若要深入了解 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 引數來指定。 它可以是參考內建計量的字串,也可以是使用者定義的函式。

AutoML 最佳化計量

平行微調

在某些情況下,您可能想要使用 Apache Spark 來平行處理您的訓練,以加速 AutoML 試用。 針對 Spark 叢集,FLAML 預設會為每個執行程式啟動一次試用。 您也可以使用 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 支援下列模型:

分類 迴歸 時間序列預測
(PySpark) 梯度提升樹狀結構 (GBT) 分類器 (PySpark) 加速失敗時間 (AFT) 存續迴歸 Arimax
(PySpark) 線性 SVM (PySpark) 一般化線性迴歸 AutoARIMA
(PySpark) 貝氏機率分類 (PySpark) 梯度提升樹狀結構 (GBT) 迴歸 平均
(Synapse) LightGBM (PySpark) 線性迴歸 CatBoost
CatBoost (Synapse) LightGBM 決策樹
決策樹 CatBoost ExponentialSmoothing
極度隨機樹狀結構 決策樹 極度隨機樹狀結構
漸層停駐提升 彈性網路 ForecastTCN
K 最近鄰演算法 極度隨機樹狀結構 漸層停駐提升
Light GBM 漸層停駐提升 Holt-Winters 指數平滑
線性 SVC K 最近鄰演算法 K 最近鄰演算法
羅吉斯迴歸 LARS Lasso LARS Lasso
使用 L1/L2 正規化進行羅吉斯迴歸 Light GBM Light GBM
貝氏機率分類 使用 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.AutoMLflaml.tune.tune.ExperimentAnalysis 物件作為輸入。

您可以在筆記本內使用下列函式:

  • plot_optimization_history:繪製實驗中所有試用的最佳化歷程記錄。
  • plot_feature_importance:為資料集中的每個功能繪製重要性。
  • plot_parallel_coordinate:在實驗中繪製高維度參數關聯性。
  • plot_contour:在實驗中將參數關聯性繪製為分佈圖。
  • plot_edf:繪製實驗的目標值 EDF (經驗分佈函式)。
  • plot_timeline:繪製實驗的時間軸。
  • plot_slice:在研究中將參數關聯性繪製為切片圖。
  • plot_param_importance:繪製實驗的超參數重要性。