概述

我们很高兴地宣布正式发布自动化机器学习 (AutoML) 训练代码生成。借助此功能,用户可以查看其 AutoML 模型背后的训练脚本,以确保他们对模型的训练方式完全透明。用户还可以使用该脚本根据其用例的需要自定义/调整训练,从而使他们能够快速将 AutoML 模型转移到生产环境中。

为什么这很重要?

AutoML对于数据科学家来说是一个非常强大的工具。他们需要做的就是提供数据并配置基本作业参数,AutoML 会迭代适用的 ML 算法,以根据提供的数据和所选的准确性指标训练理想的模型。然而,我们经常听到 AutoML 是一个黑匣子——禁止数据科学家生产 AutoML 模型。

其中一个原因是,企业通常有合规性法规,要求数据科学家充分了解模型的训练方式。使用生成的代码脚本,数据科学家可以查看和分析模型训练代码,并放心地使用他们正在推送到生产的模型。此外,在某个问题空间中工作的数据科学家可以利用他们的主题专业知识来进一步迭代 AutoML 提供的模型。这可能以在训练 AutoML 模型期间修改特征化步骤或切换超参数的形式实现。生成的脚本尽可能使用开源框架,因此数据科学家可以在 AutoML 的最佳模型之上快速构建,并根据需要进行自定义,以提高其用例的模型性能。此外,由于模型训练是一个迭代过程,因此数据科学家跟踪用于生成不同模型的代码版本也非常重要。使用生成的 python 脚本,他们可以使用他们选择的版本控制系统来确保他们的训练过程是可跟踪和可重现的。

此功能如何工作?

默认情况下,会为所有 AutoML 模型生成训练代码。可以访问两个主要资产 - script.py(训练代码),(用于在 AzureML 中将 script.py 作为作业提交的样板 jupyter 笔记本)。

image

Script.py

此文件包含训练模型所需的核心逻辑。虽然旨在在 Azure ML 命令作业的上下文中执行,但经过一些修改,模型的训练代码也可以在用户选择的环境中作为独立脚本运行。

该脚本大致可以分为以下几个部分:数据准备、数据特征化和算法规范。上述部分与允许按原样提交独立脚本以复制 AutoML 模型训练的函数拼接在一起。

数据准备代码

函数 prepare_data() 清理数据,拆分特征和样本权重列,并准备数据以用于训练。此函数可能因数据集类型和 AutoML 试验任务类型(分类、回归、时序预测)而异。

以下示例显示,通常传入数据加载步骤中的数据框。提取标签列和样本权重(如果最初指定),并从输入数据中删除包含 NaN 的行。

image2

可以根据需要将自定义数据准备添加到上述代码中。

数据特征化代码

此处重现了原始实验的特征器及其参数。

例如,在此函数中可能发生的数据转换可以基于SimpleImputer()和CatImputer()等估算器,也可以基于StringCastTransformer()和LabelEncoderTransformer()等转换器。

下面的示例是 StringCastTransformer() 类型的转换器,可用于转换一组列。在这种情况下,由 column_names 表示的集合。

image3

算法和超参数规范代码

算法和超参数规范代码可能是许多数据科学家最感兴趣的。

以下示例使用具有特定超参数的 XGBoostClassifier 算法。在大多数情况下,生成的代码使用开源软件包和类(例如,XGBoost分类器和其他常用的库,如LightGBM或Scikit-Learn算法)。数据科学家可以根据自己的技能和专业知识根据需要调整其超参数,从而自定义该算法的配置代码。

image4

Script_run_notebook.ipynb

此笔记本是使用 Azure ML 计算执行 script.py 的简单方法。此笔记本类似于现有的自动化 ML 示例笔记本,具有用于连接到工作区、创建/使用 AzureML 计算和提交 AzureML 命令作业运行的单元格(如下图所示)。

image5