介绍AutoGluon
AutoGluon是一个新的开源 AutoML库,可针对涉及图像,文本和表格数据集的实际应用,自动进行深度学习(DL)和机器学习(ML)。无论您是机器学习新手还是经验丰富的从业人员,AutoGluon都能简化您的工作流程。使用AutoGluon,您可以仅使用几行Python代码来开发和完善深度学习模型。
主要特点
从历史上看,要创建机器学习模型,需要大量的背景知识,经验和人力。数据准备,特征工程,验证拆分,缺失值处理和模型选择只是机器学习应用程序必须解决的许多任务中的一部分。一个特别困难的任务是选择超参数。
超参数代表用户在构建模型时必须做出的许多选择,例如数据处理步骤,神经网络体系结构以及训练期间使用的优化程序。每个超参数都以不透明的方式影响机器学习模型的预测性能,而越强大的模型(如深度神经网络)需要调优的超参数越多。轻微的超参数修改可能会显著地改变模型的质量。由于通常不清楚如何做出这些决策,开发人员通常手动调整他们的ML管道的各个方面,这可能需要多次迭代和艰苦的人力工作。
AutoGluon将前面提到的所有任务都自动化,从而创造了一种真正无需手动的体验。AutoGluon将利用可用的计算资源来找到最强的ML方法。
AutoGluon使您能够自动实现图像分类、对象检测、文本分类等监督学习任务。每个任务的超参数通过贝叶斯优化、超带和强化学习等优化算法自动选择。使用AutoGluon,您不必熟悉底层模型,因为所有超参数都将自动调优到默认范围内,这些默认范围对于特定的任务和模型来说性能良好。
对于专业的ML从业人员,AutoGluon允许轻松地自定义此过程。例如,您可以为某些超参数指定要值范围,也可以使用AutoGluon自动调整自定义模型的各个方面。如果您可以访问多台机器,AutoGluon可以很容易地将其计算分布到这些机器上,以便更快地返回经过训练的模型。
AutoGluon示例
安装
# CUDA 10.0 and a GPU for object detection is recommended
# We install MXNet to utilize deep learning models
pip install --upgrade mxnet-cu100
pip install autogluon
对象检测示例
我们以对象检测的任务为例来演示AutoGluon的简单接口。在对象检测中,不仅要识别图像中的对象,而且要用边界框定位它们。
我们将使用AutoGluon在一个用于演示目的(以确保快速运行时)的数据集上训练一个对象检测器。数据集是使用VOC数据集的摩托车类别生成的。在下面的Python代码中,我们首先导入AutoGluon,将将对象检测指定为任务,将数据下载到我们的机器上,最后将数据加载到Python中:
import autogluon as ag
from autogluon import ObjectDetection as task
url = 'https://autogluon.s3.amazonaws.com/datasets/tiny_motorbike.zip'
data_dir = ag.unzip(ag.download(url))
dataset = task.Dataset(data_dir, classes=('motorbike',))
接下来,我们可以通过调用fit()函数来使用AutoGluon训练一个检测器模型:
detector = task.fit(dataset)
在这个对fit()的调用中,AutoGluon在不同的网络配置和优化超参数下训练许多模型,选择其中最好的作为最终返回的检测器。在没有任何用户输入的情况下,对fit()的调用还自动利用了最新的深度学习技术,例如预训练的YOLOv3网络的迁移学习。我们可以使用predict()方法在新图像上测试训练过的检测器:
url = 'https://autogluon.s3.amazonaws.com/images/object_detection_example.png'
filename = ag.download(url)
index, probabilities, locations = detector.predict(filename)
AutoGluon的predict函数自动加载测试图像,并输出每个被检测对象的预测对象类别、类概率和边界框位置。将自动生成如上所示的可视化图像。
表格数据示例
最常见的数据形式是表格数据集。它们由结构化数据组成,通常位于CSV文件或数据库中。在表格数据集中,每一列代表某个变量的测量值(也称为特征),每一行代表单独的数据点。AutoGluon可用于训练基于同一行中的其他列来预测特定列值的模型,并且能够泛化到以前未见过的实例。
我们将要训练的数据集是成人收入分类数据集。该数据集包含约48,000个人的信息,包括数字特征(例如年龄)和分类特征(例如职业)。该数据集通常用于预测个人收入。在此示例中,我们将预测一个人的年收入是否超过50,000美元。我们将使用80%的数据来训练,并使用20%的数据来测试生成的AutoGluon预测器。使用AutoGluon,无需指定验证数据。AutoGluon将使用提供的训练数据最优地分配验证集。
举例来说,在Python代码中,首先导入AutoGluon并指定一个任务,在这个任务中,我们将使用TabularPrediction处理表格数据。然后我们从S3上的CSV文件加载数据集。只需调用一次fit(), AutoGluon就可以处理数据并训练一个称为“预测器”的ML模型集合,该模型能够预测数据中的“类”变量。它将使用其他列作为预测特征,如个人的年龄、职业和教育程度。这个模型的集合包括ML中经过测试的算法,如LightGBM、CatBoost和深度神经网络,它们始终优于逻辑回归等更传统的ML模型。
注意,我们不需要进行任何数据处理,特征工程设计,甚至不需要声明预测问题的类型。AutoGluon自动准备数据并推断我们的问题是回归还是分类(包括它是二元还是多元)。经过训练的预测器模型将保存到task.fit()调用中指定的位置。
from autogluon import TabularPrediction as task
train_path = 'https://autogluon.s3.amazonaws.com/datasets/AdultIncomeBinaryClassification/train_data.csv'
train_data = task.Dataset(file_path=train_path)
predictor = task.fit(train_data, label='class', output_directory='ag-example-out/')
现在我们的预测器模型已经训练完毕,我们将对以前看不见的测试数据进行预测。我们可以直接使用返回的预测变量,也可以从指定的输出目录中加载它。
predictor = task.load('ag-example-out/')
test_path = 'https://autogluon.s3.amazonaws.com/datasets/AdultIncomeBinaryClassification/test_data.csv'
test_data = task.Dataset(file_path=test_path)
y_test = test_data['class']
test_data_nolabel = test_data.drop(labels=['class'],axis=1)
y_pred = predictor.predict(test_data_nolabel)
y_pred_proba = predictor.predict_proba(test_data_nolabel)
print(list(y_pred[:5]))
print(list(y_pred_proba[:5]))
['<= 50K','<= 50K','> 50K','<= 50K','<= 50K']
[0.077471,0.0093894,0.973065,0.0021249,0.001387]
现在我们来看一下模型排行榜:
leaderboard = predictor.leaderboard(test_data)
AutoGluon的模型排行榜
该排行榜显示了AutoGluon训练的每个模型,它们在测试和验证数据上的得分以及训练时间(以秒为单位)。可以看出,weighted_ensemble在验证和测试集上表现得最好,达到了87.76%的准确性。
最后
在本文中,我们介绍了AutoGluon,它旨在为ML专家和新手提供最佳的机器学习和深度学习体验。