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()

  • Spark 数据帧上的 Pandas:当输入数据作为 Spark 数据帧存储时,可以使用 to_pandas_on_spark() 将它转换为 Spark 上的 Pandas,然后将其作为数据帧和标签传递给 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
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.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:绘制试验的超参数重要性。