分享

一文彻底掌握自动机器学习AutoML:AutoGluon

 汉无为 2022-05-22 发布于湖北


这是自动机器学习系列文章的第10篇。​为便于理解,本文主要分为两个部分。第一部分介绍 AutoML 的背景信息,并比较下近期较为流行的AutoML框架,第二部分介绍 AutoGluon(AutoML 框架之一)的端到端示例用例。快来和小猴子一起学习吧!

AutoML 的基础知识

典型的机器学习模型包括以下步骤:

  1. 数据采集
  2. 数据准备
  3. 算法选择
  4. 模型训练
  5. 模型评估
  6. 参数调整
  7. 模型预测与解释

从上面这一些列流程可以看出,实现机器学习模型所涉及的复杂性和学习量都是不小的。并且在选择最佳模型之前,它还需要广泛的领域专业知识来生成和比较多个模型,最终才能获得最佳模型来实现我们的最终目标。

而自动机器学习AutoML生来就是来简化以上繁琐的过程,AutoML 被用于自动化构建整个机器学习管道的过程,而人工干预最少。

一些流行的 AutoML 框架

  1. AutoGluon[1] (2020) :这个由 AWS 开发的 AutoML 开源工具包有助于在文本、图像和表格数据的各种机器学习和深度学习模型中获得强大的预测性能。支持在 Linux 、 Mac 和Windows操作系统安装。
  2. TPOT[2](2018):基于树的管道优化工具(TPOT)也是流行的开源 AutoML 框架之一,它使用 scikit-learn 库作为其 ML 列表的一部分。根据官方文档,它使用遗传编程来智能地探索数千种可能的管道,为给定的数据集找到性能最好的模型管道。注意,TPOT 不会对数据集执行任何预处理,因此希望输入的数据集是干净的。 但是,它可以执行特征处理、模型选择和超参数优化以返回性能最佳的模型。它是回归和分类问题的不错选择,但不适用于 NLP。
    一文彻底搞懂自动机器学习AutoML:TPOT
  3. H2O AutoML[3] (2018):H2O AutoML 框架是一个开源工具包,最适合传统神经网络和机器学习模型。它可用于自动化机器学习工作流程,即在指定时间段内进行模型训练和模型的超参数调整。它可以执行数据预处理、模型选择和超参数调整。此外,它会返回模型的排行榜视图及其性能结果。但要注意,由于 H2O AutoML 是用 java 开发的,因此需要 java 运行时环境
    一文彻底搞懂自动机器学习AutoML:H2O
    不写代码也能玩自动机器学习AutoML:H2O Flow
  4. Auto-sklearn[4] (2015):这个 AutoML 框架由 Matthias Feurer 等人开发,根据官方文档,它基于贝叶斯优化、元学习和集成构建。算法选择和超参数调整是使用这个框架自动化的。该框架仅支持基于 sklearn 的模型,即不适用于图形模型或序列预测问题。
    一文彻底搞懂自动机器学习AutoML:Auto-Sklearn
  5. MLBox[5] (2017):另一个著名的基于 Python 的开源 AutoML 库。它功能强大,提供与预处理(读取和预处理数据)、优化(测试和/或优化模型)和预测(预测测试数据集的结果)相关的三个子包。此外,它可以执行特征选择、超参数优化、分类和回归的自动模型选择以及使用所选模型预测目标变量一文彻底掌握自动机器学习AutoML:MLBox
  6. AutoWEKA[6] (2013): Auto-WEKA 使用全自动方法并利用贝叶斯优化来选择机器学习算法并设置其超参数。换句话说,它有助于自动为给定的分类或回归任务应用最佳参数设置,以获得一个好的模型。
  7. Auto-PyTorch[7] (2019):该框架由Freiburg大学和Hannover大学的 AutoML 小组开发。它基于 PyTorch 深度学习框架,支持分类和回归的表格数据。它还可以应用于图像数据进行分类。
  8. Autokeras[8] (2017):它是一个用于深度学习自动化任务的开源库。它可以帮助获得用于分类和回归任务的良好神经网络模型。AutoML Toolkit 建立在由德克萨斯 A&M 大学的 Datalab 团队开发的深度学习框架 Keras 之上。由于 Auto-Keras 遵循经典的 Scikit-Learn API 设计,因此语法相似且易于使用。
  9. MLJAR[9] (2019) :该工具包与表格数据集一起使用,并在 AutoML 训练的每个步骤中为用户提供透明度。有关训练模型的所有信息都保存在硬盘驱动器中,并且可供 ML 用户访问。

AutoML适用场景

AutoML 在结构化数据上表现良好,即当列名清晰标记且数据格式正确时。由于这些工具执行插补和归一化,它们可以轻松处理数据集中的缺失值或偏度。

当我们需要对模型进行快速评估时,AutoML 的表现非常出色。与较大的数据集相比,使用 AutoML 显然可以更快地训练中小型数据集。在更大和更复杂的数据集上选择使用 AutoML 显得不是那么明智,因为它可能会因为使用更多资源而变得昂贵,或者由于超参数调整和模型优化的多次实验而可能非常缓慢。所以大家按需使用。

AutoGluon 基础

到这里,小猴子将和大家一起探索 AutoGluon 自动执行机器学习任务的不同功能。即使用 AutoGluon 以及它支持的其他预测类别来实现表格数据预测。我们将搞明白在使用 AutoGluon 时如何为特定机器学习任务获得最合适的模型。

AutoGluon有如下优势:

  • 简单性:只需几行代码即可实现分类和回归模型的训练和部署。
  • 鲁棒性:无需进行任何特征工程或数据操作,用户应该能够使用原始数据。
  • 时间可控:在指定的时间约束下获得最佳模型。
  • 容错性:即使中断也可以恢复训练,用户可以检查所有中间步骤。

AutoGluon 继为机器学习的初学者也是为专家而设计。该工具涵盖了深度学习、自动堆栈集成以及文本、图像和表格数据的实际应用程序。

安装和使用

官方支持在 Linux 、 Mac 和Windows操作系统安装。需要注意的是,在linux系统上使用较为方案,在Mac 和Windows上安装或多或少有些许麻烦,需要注意的事项较多,建议根据官方教程进行安装,有关 AutoGluon 及其不同版本的安装的所有详细信息都在这里AutoGluon官方安装教程 [10]

图片
pip3 install -U pip
pip3 install -U setuptools wheel

# CPU版本的pytorch占用空间更小
# 请参阅pytorch文档中的安装说明 --> https://pytorch.org/get-started/locally/
pip3 install torch==1.10.1+cpu -f https://download.pytorch.org/whl/cpu/torch_stable.html

pip3 install autogluon

AutoGluon 可用于以下类别:

  1. 结构化数据预测
  2. 图像预测
  3. 物体检测
  4. 文本预测
  5. 多模态预测

AutoGluon 分类实例

将使用 Stroke 预测数据集。你可以从Kaggle[11]下载数据集。

数据准备

from pandas as pd
#拆分数据集
from sklearn.model_selection import train_test_split 
#处理表格数据并训练模型
from autogluon.tabular import TabularDataset, TabularPredictor 
df=pd.read_csv('/content/healthcare-dataset-stroke-data.csv')
# 分成训练集和测试集
df_train,df_test=train_test_split(df,test_size=0.33,random_state=1
df_train.shape, df_test.shape

((3423, 12), (1687, 12))

df.head()
图片

从新创建的测试集中删除目标结果列。

test_data=df_test.drop(['stroke'],axis=1
test_data.head()
图片

模型训练

现在,我们构建一个分类器来训练具有给定条件的个体是否可能有中风的风险。指定“stroke” 目标列,并在训练数据集上训练分类器。参数(可选)'verbosity=2' 将显示预测器为达到最佳模型而采取的所有步骤,而 'presets='best_qualit'' 将确保从训练的模型中选择最佳模型。官方文档中还提到了其他附加参数,可用于微调模型。

predictor = TabularPredictor(label ='stroke')
predictor.fit(train_data = df_train, 
              verbosity = 2,
              presets='best_quality')

该步骤将打印出很长的日志,我们截取其中一部分,观察得到,即使我们没有指定问题的类型,AutoGluon 也正确理解这是一个基于结果列中两个唯一标签'0'和'1'的二元分类问题。

图片

此外,还可以看到 AutoGluon 恰当地为此分类任务选择了'accuracy'指标。

图片

最佳模型

分类器训练完成后,可以使用以下命令打印它训练过的模型的摘要。

predictor.fit_summary()
图片

本次示例中,AutoGluon 训练了 24 个模型,但我们更感兴趣的是找出 AutoGluon 选择的最佳模型。而我们只需使用 leaderboard() 命令即能查看到按顺序排列训练好的模型。

predictor.leaderboard(
        df_train,silent=True)
图片

特征重要性

是否能够输出特征重要性,也是大家非常关注的一点。在AutoGluon中,也是轻松实现。

predictor.feature_importance(
data=df_train)
图片

在这里我们可以看到,它已将年龄和 bmi 确定为预测结果的最重要因素。

模型预测

接下来,将测试数据提供给分类器进行预测,可以将预测结果存储在 DataFrame 中。

y_pred = predictor.predict(test_data) 
y_pred=pd.DataFrame(y_pred,columns=['stroke']) 
y_pred #打印DataFrame
图片

模型评估

要了解评估指标'accuracy',让我们打印它的详细信息。

predictor.evaluate(df_test)
图片

从结果看,在 AutoGluon 中进行了数据预处理和特征工程,模型训练过程也包括了交叉验证。因此,我们只用两行代码就得到了 95% 准确率的训练分类器(用于分类器训练和预测)。如果它是一个传统的 ML 模型,我们将花费很长时间来完成整个过程,包括 EDA、数据清理以及设置多个模型的编码。由此可见,AutoGluon 让这一切变得非常简单。

AutoGluon 回归实例

我们尝试另一个示例来探索 AutoGluon 如何处理回归问题。这里我们将使用 sklearn 数据集库中的“波士顿价格”数据集。本次执行步骤与分类类似。

数据准备

#导入数据集
import numpy as np 
import pandas as pd 
from sklearn.datasets import load_boston 
boston= load_boston() 
boston.keys() 
print(boston.DESCR)#使用此命令了解数据集的更多信息
df=pd.DataFrame(data=boston.data,columns=boston.feature_names) 
#将价格列添加到数据框
df['PRICE'] = boston.target 
df.head()
图片

拆分数据集

# 分成训练测试集
df_train,df_test = train_test_split(df, test_size=0.33, random_state=1
df_train.shape,df_test.shape
((339, 14), (167, 14))

从测试数据集中删除目标列。

test_data=df_test.drop(['PRICE'],axis=1
test_data.head()

模型训练

设置预测器(回归器)

predictor= TabularPredictor(label ='PRICE')
predictor.fit(train_data = df_train, 
              verbosity = 2,
              presets='best_quality'
predictor.leaderboard(df_train,silent=True)
图片

模型预测

# 进行预测
y_pred = predictor.predict(test_data)
图片

本例中,AutoGluon 也根据列的dtype=float和多个唯一值的存在正确地将问题类型识别为回归。并且它还恰当地选择了评估指标 'root_mean_squared_error'

对于回归问题,AutoGluon 训练了 11 个模型并推荐kNN (KNeighborsDist_BAG_L1)作为最佳模型,其次是 XGBoost (XGBoost_BAG_L1)

预测器的语法在分类和回归问题中是相同的。从结果看,AutoGluon TabularPrediction 任务在不同的数据集上运行良好。为了简化演示,我们选择了较小的数据集,你可以试试它在使用更大的数据集时的表现会有怎么的惊喜。

AutoGluon 中的其他用例

最后,简要介绍一下 AutoGluon 中的其他可用选项。

  1. 图像预测:与结构化数据预测一样,AutoGluon 使用简单的 'fit()' 命令根据图像内容对图像进行分类,从而自动生成高质量的图像分类模型。
  2. 目标检测:目标检测是计算机视觉中的一项重要任务,涉及检测和定位图像中的目标的过程。AutoGluon 也提供了调用简单的'fit()' 命令的选项,该命令将自动生成高质量的目标检测模型,用于识别图像中目标的存在和位置。
  3. 文本预测:同样对于监督学习中的文本数据预测,我们可以使用一个简单的 'fit()' 命令来自动生成高质量的文本预测模型。数据中的每个训练示例可能是一个句子、一个短段落、文本中存在的一些附加数字/分类特征。一次调用 'predictor.fit()' 命令可以在给定的文本数据集上训练高度准确的神经网络,其中用于预测的目标值或标签可能是连续值或单个类别。尽管 TextPredictor 仅设计用于分类和回归任务,但如果数据被正确格式化为结构化数据表,它也可以直接用于其他 NLP 任务。TextPredictor 仅使用 Transformer 神经网络模型。这些通过从BERT[12]ALBERT[13]ELECTRA[14]等预训练 NLP 模型列表中迁移学习来拟合提供的数据。它还允许对包含文本、数字和分类列的多模态数据表以及可以通过超参数优化 (HPO) 自动调整的神经网络超参数进行训练。
  4. 多模态预测:由文本、数字和分类列组成的多模态表格数据也可以由 AutoGluon 处理。原始文本数据被视为 AutoGluon 中数据表的一级子项。它可以帮助你训练和匹配各种模型,包括 LightGBM、RF、CatBoost 等经典表格模型以及基于预训练 NLP 模型的多模式网络。

写在最后

从稳重我们可以看到, AutoML 框架在构建机器学习管道上非常简单而高效。它可用于减少创建可用于生产的 ML 模型所需的时间,并且具有显着的简单性和效率。这加快了整个 ML 流程,从而为数据科学家腾出时间,更加专注于寻找现实问题的解决方案。

使用 AutoML 的最大好处可以归因于它能够自主地在各种数据集上训练和测试多种现有机器学习算法。此外,需要注意的是,使用 AutoML 并不会消除对整个建模过程的基本信息的理解需要,包括模型训练、数据基本信息和期望结果等。因此,AutoML 的成功可能取决于它在多长时间内被接受、采用以及它为某个行业带来的切实利益。

参考资料

[1]

AutoGluon: https://auto./stable/index.html

[2]

TPOT: http://epistasislab./tpot/

[3]

H2O AutoML: https://www./products/h2o-automl/

[4]

Auto-sklearn: https://automl./auto-sklearn/master/

[5]

MLBox: https://mlbox./en/latest/

[6]

AutoWEKA: https://www.cs./labs/beta/Projects/autoweka/

[7]

Auto-PyTorch: https://github.com/automl/Auto-PyTorch

[8]

Autokeras: https:///

[9]

MLJAR: https:///automl/

[10]

AutoGluon官方安装教程 : https://auto./stable/install.html

[11]

Stroke数据集: https://www./fedesoriano/stroke-prediction-dataset

[12]

BERT: https:///pdf/1810.04805.pdf

[13]

ALBERT: https:///pdf/1909.11942.pdf

[14]

ELECTRA: https:///pdf?id=r1xMH1BtvB

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多