写点什么

回顾 Alex Smola 讲述的“自动化机器学习 (AutoML)”,本文带你了解 AutoGluon!

发布于: 2021 年 05 月 06 日
回顾 Alex Smola 讲述的“自动化机器学习(AutoML)”,本文带你了解 AutoGluon!

拥有数据科学工作经历的朋友,肯定都有类似的切身感受——机器学习中最大的难点,就是不确定工作什么时候才能完成。我们不得不一个个问题、一套套数据集、一种种解决思路尝试,而且总得在浪费了一定时间后才能确定目前的方法有没有效。面对如此艰难的机器学习过程,有经验的从业者们当然都有自己的最佳实践、或者说应对之道。但作为初学者,我们自己该怎么快速找出正确的探索方向,避免把大量资源与时间浪费在“死胡同”上呢?


自动化机器学习(AutoML)为数据科学家和工程师带来了福音。AutoML 的目标是使具有有限机器学习专业知识的开发人员能够针对其业务需求训练高质量的模型。通过自动化主要的重复性任务,如特征选择或超参数优化。这样可以在更短的时间内创建更多的模型,并提高质量和准确性。


在亚马逊云科技 AI 大会上,亚马逊杰出科学家 Alex Smola 重点介绍一个神器—AutoGluon。使用 AutoGluon,工程师可以只使用 Amazon S3、Amazon Lambda 和 Amazon SageMaker,而不用写任何一行代码来构建模型,或者使用几行 Python 代码就实现更细粒度的控制。AutoGluon 可以自动处理表格数据、文本、图像及其组合,而无需手动预处理。不仅如此,其构建的模型还会随着工具箱的改进而不断自动优化。

什么是 AutoGluon?

在 AutoGluon 的官方网站上,是这么介绍的:


AutoGluon 支持易于使用和易于扩展的 AutoML,重点是自动组装和堆叠、深度学习和跨文本、图像和表格数据的真实应用程序。它既可以适用于 ML 初学者,也适合机器学习专家,AutoGluon 使您能够:


用几行代码为您的原始数据快速构建深度学习和经典 ML 解决方案的原型;

在没有专家知识的情况下自动使用最先进的技术;

利用自动超参数调整、模型选择/组合、架构搜索和数据处理;

轻松改进/调整您的定制模型和数据管道,或为您的用例定制 AutoGluon;


在亚马逊云科技的 Amazon SageMaker 上采用 AutoGluon,您不需要一行代码,即可轻松通过下面的方式采用:



  • 一个 CloudFormation 的模版来设计配置;

  • 把数据拷贝到 Amazon S3 的存储桶里面;

  • 自动化的训练(包括自动选择模型);

  • 自动化的推理;


如果是在本地进行使用,也仅仅需要 3 行代码(左右滑动即可查看完整代码):


from autogluon.tabular import TabularPredictorpredictor = TabularPredictor(label=‘COLUMN_NAME’).fit(train_data=‘TRAIN.csv’)predictions = predictor.predict(‘TEST.csv’)
复制代码


最近,AutoGluon 发布了 0.1 版本的更新,发布要点如下:


#01

修改但统一的 API,与 v1.0 或 GA 一致

先前的 task 已被弃用,现在我们使用 TabularPredictor,TextPredictor,ImagePredictor 和 ObjectDetector 作为新入口。


#02

改进的 autogluon.vision

现在支持所有图像分类主干(100+)和 4 种对象检测架构(SSD,YOLOv3,Faster-RCNN 和 CenterNet)。


#03

AutoGluon 中首次支持多模式


#04

其他

  • 现在已完全支持 MacOS。

  • 现在已通过实验支持 Windows。Windows 的安装说明仍在进行中。

  • 现在支持 Python 3.8。

  • 将 AutoGluon 更新为名称空间包,现在可以单独安装各个模块以提高灵活性。例如,仅安装 HPO 相关功能,您可以通过 pip install autogluon.core 获得最小安装量。


今天,我们将向大家重点介绍 AutoGluon 当中的表格数据处理子功能,下面有请今天的主角——AutoGluon-Tabular!对于图像分类,对象检测,文本分类等其他不同主题,希望可以触类旁通,让大家能够快速上手后进一步了解。


AutoGluon-Tabular 提供用户友好型 API,可帮助大家轻松掌握专业数据科学家所熟稔的一切最佳实践。项目在设计当中遵循以下核心原则


1.简单性:用户应该能够训练出分类与回归模型,并使用寥寥几行代码完成部署。

2.健壮性:用户应只需提供原始数据,而无需进行任何特征工程或者数据操纵。

3.时间可预测性:用户应能够指定时间预算,并在既定时段内获取最佳模型。

4.容错性:用户应能够在中断之后继续训练,并灵活检查所有中间步骤。


如果您已经是一位专业数据科学从业者,而且希望了解 AutoGluon-Tabular 能否为您提供助力,答案也同样是肯定的。AutoGluon-Tabular 同样能够为高水平专家分担大量耗时耗力的手动步骤——包括处理丢失数据、手动特征转换、数据拆分、模型选择、算法选择、超参数选择与调优、多模型组合以及数据变更引发的以上步骤重复执行等。


AutoGluon-Tabular 还包含用于组装和堆叠的全新技术,能够显著提高模型准确性。凭借出色的开源、透明与可扩展性,您可以清晰了解 AutoGluon 在流程内各阶段中的工作内容,甚至引入您自己的算法并将其与 AutoGluon 结合使用。

AutoGluon API

AutoGluon-Tabular 用户只需要掌握三个 Python 函数:Dataset(), fit()与 predict()。但 API 的便捷性只是“假象”,AutoGluon-Tabular 在幕后一直努力工作,为您提供高质量模型。在下一章节当中,我们将具体剖析这些函数、了解它们的工作原理。

步骤 0

启动您的 Amazon EC2 实例;安装并导入 AutoGluon

AutoGluon 能够利用多核 CPU 加快训练速度。本文建议大家使用 C5 或 M5 系列 Amazon EC2 实例。vCPU 数量的提升将进一步增强性能表现。关于启动及访问实例的简要指南,请参阅 Amazon EC2 入门文档。请按照 AutoGluon 网页上的说明安装 AutoGluon。在多数情况下,您只需运行 pip install 即可。


要运行 AutoGluon-Tabular,我们首先需要表明当前任务为构建表格数据预测器。对于图像分类问题,请将 TabularPredictor 替换为 ImagePredictor;对于对象检测任务,请使用 ObjectPredictor;对于文本分类任务,请使用 TextPredictor。API 中的其余部分保留原样即可。通过这种方式,大家可以轻松在不同问题之间往来切换,而无需重新学习 API 相关知识。


from autogluon.tabular import TabularDataset, TabularPredictor
复制代码

(左右滑动即可查看完整代码)

步骤 1

加载数据集

如果正在使用 pandas,则可直接选择 Dataset 函数,其提供与 pandas 高度类似的使用体验、允许您执行放置变量或添加多个数据集等常规操作。由于 AutoGluon-Tabular 会为您自动管理数据预处理作业,因此您无需进行任何数据操作。


data = TabularDataset(DATASET_PATH) 
复制代码

步骤 2

拟合模型

fit()函数将帮助我们完成下一步中涉及的各项繁重工作。此函数的基本职能有二:研究数据集,为训练做好准备;训练多个模型,并以组合方式生成高准确性模型。


predictor = TabularPredictor(label=LABEL_COLUMN_NAME).fit(data) 
复制代码

(左右滑动即可查看完整代码)

步骤 3

做出预测

predict 函数将根据新数据生成预测。预测结果可能是为分类问题提供分类结论与概率,或者是为回归问题提供连续数值。在运行 fit()函数时,其会生成多套模型并保存在磁盘当中。如果稍后需要再次访问,您可以使用 load 命令快速加载预测变量并执行新一轮预测。


prediction = predictor.predict(new_data) 
复制代码

fit()函数的神奇能力

在将数据集传递至 fit()函数时,它会完成两项操作:数据预处理加模型训练。现在,让我们深入了解底层系统中究竟发生了什么。

数据预处理

AutoGluon-Tabular 会首先检查标签列,确定您希望处理的是分类问题(预测类别)或回归问题(预测连续值)。接下来,它会启动数据预处理步骤,将数据转换为特定形式,进而在 fit()阶段供多种机器学习算法使用。


在预处理步骤当中,AutoGluon-Tabular 会首先将各项特征归类为数字、类别、文本或者日期/时间。用户 ID 等无法分类的列(例如包含非数字信息且不重复的列)将被丢弃。


文本列将被转换为具有 n-gram(包含 n 个项或词汇的连续序列)特征的数字矢量;日期与时间特征将被转换为对应数值。为了处理缺失的离散变量,AutoGluon-Tabular 会创建附加的 Unknown 类别(而非采取诸如平均值代理等插值操作)。在真实数据集当中,由于种种原因的影响(例如数据损坏、传感器故障或者人为错误),数值丢失时常发生。但一丢了事并不科学,其中仍有可能包含某些有趣的模式。将其归类为 Unknown,可以使 AutoGluon-Tabular 在使用新数据生成预测时更可靠地处理这些之前不可知的类别。在模型拟合阶段,AutoGluon-Tabular 还会在不同模型上执行特定的其他数据预处理步骤。

模型训练

在调用 fit()函数时,AutoGluon-Tabular 将在预处理完成的数据之上训练出一系列机器学习模型。接下来,它会通过组装与堆叠方式组合出多套模型。


AutoGluon-Tabular 按照指定的顺序训练各个模型。它会首先训练性能更为可靠的模型(例如随机森林模型),而后逐步训练计算量更大但可靠性较低的模型(例如 k 近邻模型)。这种方法能帮助我们有效控制 fit() 函数的执行时长,确保在特定时间周期内训练出最佳模型。AutoGluon-Tabular 还允许您灵活决定以无限时间周期换最佳准确率,还是要在特定成本或时间预算之内获取相对最佳准确率。


AutoGluon-Tabular 目前支持以下算法,如果不设时间限制,则逐一训练出相应的机器学习模型:


1.随机森林

2.极端随机树

3.k 最近邻

4.LightGBM 提升树

5.CatBoost 提升树

6.AutoGluon-Tabular 深层神经网络

7.XGBoost 提升树


  • AutoGluon-Tabular 深层神经网络架构中的创新元素

目前,数据科学界存在一种普遍误解,即深度学习方法不适用于处理表格数据。这种误解有其理由:卷积机制是通过权重共享被引入神经网络的,借此实现其平移不变性。这种方式特别适合包含一维信号、2D 或 3D 图像及视频的数据集,因为其中每个信号样本或像素值本身对应的预测强度不高。但在包含大量表格数据的应用场景下,每项特征都非常重要,且对应的预测算力需求远高于单一像素。在这类情况下,前馈或卷积神经网络架构与基于决策树的其他架构相比往往性能较差。


为了解决这些难题,AutoGluon-Tabular 采用了如下图所示的新型神经网络架构。经验研究表明,精心设计的神经网络完全可以带来显著的准确率提升,特别是在与其他类型模型相结合时表现尤佳。我们将在下一章节中具体讨论。



与常规使用的纯前馈型网络架构有所不同,AutoGluon-Tabular 为每项分类特征引入一个嵌入层,其中的嵌入维与挑选出的特定唯一类别数值保持一定比例。嵌入层机制的优势在于,它为每项分类特征引入一个可学习组件,并可供后续的前馈层使用。接下来,AutoGluon-Tabular 将分类特征的嵌入与数据特征连接为整体的大向量,该向量既馈入三层前馈网络、又通过线性跳跃连接(在残差网络中)直接接入输出预测。

组装与多层堆叠

这种将多个模型组合起来,以获取高于各个单体模型预测准确率的思路并不是什么新鲜事物。这种组装技术最早可以追溯到上世纪九十年代初,最初体现为 boosting(以及 AdaBoost 算法)与 bagging(引导聚合)方法。正是这些技术建立起决策树集合——单一决策树的成果学习能力较弱(比完全偶然好不了多少)而且相当不稳定(对数据集的变化过于敏感),但在将多个决策树组合起来之后,就能产生预测能力出色、且能够有效防止过度拟合的模型。这些早期成果也成为当代流行机器学习工具包的实现基础,AutoGluon 中使用的 LightGBM、CatBoost 以及 scikit-learn 的随机森林等都是由此而来。


那么,我们能不能将随机森林、CatBoost、k 最近邻以及其他方法的输出结合起来,进一步提升模型准确率呢?答案是肯定的。经验丰富的机器学习从业者一直在采取这类方法,而且熟练设计出多种巧妙的模型组合方式。以 Otto Group 产品分类 Kaggle 挑战赛中的获奖作品为例,拿下冠军的解决方案就包含 33 套模型,它们输出的结果又训练出另外 3 套模型(堆叠),最后再取加权平均值。



使用 AutoGluon-Tabular,您无需熟练掌握堆叠与组装方法,即可享受完全相同的处理效果。AutoGluon-Tabular 引入了一种新的多层堆叠集成形式,具体如上图所示。其运作机理可以概括为:


  • 基础层:分别对模型拟合部分提到的各套基础模型进行训练。

  • Concat 层:将第一层的输出与输入特征串联起来。

  • 堆叠器层:Concat 层的输出结果将包含多套堆叠器模型。AutoGluon-Tabular 的创新之处,是在堆叠器模型中复用基础层中的相同模型包括其超参数。由于输入特征与基础层输出被串联起来,因此堆叠器模型同样有机会接触到输入数据集。

  • 加权层:在这种集成选择方法中,系统会将堆叠器模型引入新的集成当中,借此验证准确率是否成功实现最大化。


为了确保每个学习模型都能查看完整数据集,AutoGluon-Tabular 会执行 k 倍交叉验证。为了进一步提高预测准确率并减少过度拟合,AutoGluon-Tabular 将在输入数据的 n 个不同随机分区上重复 n 次 k 倍交叉验证。这里的 n 取值,由 fit()函数调用的时限之内可完成多少个轮次估算得出。

AutoGluon-Tabular 与容错性

无论是日常生活还是数据科学领域,理论可行与现实可行之间总会存在无数障碍。使用 AutoGluon-Tabular 时,您可能会不慎按下了 Ctrol + C、遇到电压不稳/计算机断电,或者意外关闭了当前正在运行训练作业的 Amazon EC2 实例。意外总会发生,我们当然不希望自己的数据与进度就这样消失无踪。别担心,AUtoGluon-Tabular 为这些情况提供多种内置保护措施。


当我们调用 fit()函数时,AutoGluon-Tabular 会首先估算所需的训练时长;一旦某个层的预估时长超过剩余时限,它会直接跳过此层。为了确保进度不致丢失,在对每个新模型完成训练之后,它会立即将成果保存至磁盘。一旦发生意外状况,只要 AutoGLuon-Tabular 能够在故障发生之前(或者达到时限之前)对至少一套模型完成至少单倍验证(在全部 k 倍交叉验证中),则其仍可以正常产出预测结果。如果您使用的算法支持在训练过程中设置检查点(例如基于树的算法与神经网络),AutoGluon-Tabular 将可利用这些检查点继续生成预测结果。AutoGluon-Tabular 还能够预测模型在训练周期内何时会发生失败,并直接跳至下一模型。


在本文中,我们共同了解了 AutoGluon 与 AutoGluon-Tabular,并解释了如何使用它们加速数据科学项目。如果您有意了解关于 AutoGluon 的更多细节信息,包括如何在各类流行 AutoML 与 Kaggle 基准测试中使用以及如何将其与其他 AutoML 解决方案进行比较,请参阅 AutoGluon-Tabular 论文《AutoGluon-Tabular:面向结构化数据的健壮、准确 AutoML 解决方案》。


数据科学要求我们不断改进目标函数、持续优化学习模型。在探索 AutoGluon 功能的过程中,如果您有任何疑问或意见,请随时与我们联系。请在 Twitter 上关注 @shshnkp、或者通过 LinkedIn 或 GitHub 接洽 AutoGluon 开发团队。


AutoGluon 也欢迎大家积极为 AutoGluon 项目做出贡献。如果您有意参与其中,请访问 GitHub 贡献页面了解更多细节信息。


原文链接:回顾 Alex Smola 讲述的“自动化机器学习(AutoML)”,本文带你了解 AutoGluon!

用户头像

还未添加个人签名 2019.09.17 加入

还未添加个人简介

评论

发布
暂无评论
回顾 Alex Smola 讲述的“自动化机器学习(AutoML)”,本文带你了解 AutoGluon!