通过本文,你将了解如何借助开源库AutoGloon成功胜出Kaggle竞赛并学习击败其他对手的技巧。此外,你还会了解到基于AutoGloon框架仅需4行代码足可以击败99%的数据科学家。
引言
在两项受欢迎的Kaggle比赛中,AutoGloon仅在对原始数据进行了4小时的训练后就击败了99%的参赛数据科学家(AutoGloon团队,《AutoGloon:将AutoML用于文本、图像和表格数据》,2020年)。
上面这句话摘自AutoGloon的研究论文(,完整地概括了我们本文将要探索的内容:一个机器学习框架,它以最少的编码实现了令人印象深刻的性能。你只需要四行代码就可以建立一个完整的ML管道;否则,这项任务可能需要数小时。是的,只有四行代码!你不妨先一睹为快:
from autogluon.tabular import TabularDataset, TabularPredictortrain_data = TabularDataset('train.csv')predictor = TabularPredictor(label='Target').fit(train_data,presets='best_quality')predictions = predictor.predict(train_data)
这四行代码通过自动识别每列的数据类型完成数据预处理,然后通过找到有用的列组合来实现特征工程,再通过组合来进行模型训练,以便在给定时间内识别出性能最好的模型。请注意,在此处代码中,我甚至没有指定机器学习任务的类型(回归/分类),而是由AutoGloon自动进行标签检查并自行确定任务。
我是在提倡这种算法吗?也不一定。虽然我很欣赏AutoGloon的强大功能,但我更喜欢那些不会将数据科学简化为Kaggle比赛中的准确性得分的解决方案。然而,随着这些模型越来越受欢迎和广泛采用,了解它们是如何工作的,它们背后的数学和代码,以及如何利用或超越它们变得非常重要。
1.AutoGloon概述
AutoGloon是一个由亚马逊网络服务(AWS)创建的开源机器学习库。它旨在为你处理整个ML过程;具体来说,这包括从准备数据到选择最佳模型并调整其设置的整个过程。
AutoGloon库将简洁性与一流的性能相结合。它采用了集成学习和自动超参数调整等先进技术,以确保你创建的模型高度准确。这意味着,你可以开发强大的机器学习解决方案,而不会陷入技术细节的泥潭。
该库负责数据预处理、特征选择、模型训练和评估,这大大减少了建立稳健的机器学习模型所需的时间和精力。此外,AutoGloon扩展性良好,适用于小型项目和大型复杂数据集。
对于表格数据,AutoGloon既可以处理分类任务(将数据分类到不同的组中),也可以处理回归任务(预测连续结果)。它还支持文本数据,使其适用于情感分析或主题分类等任务。此外,它还可以管理图像数据,帮助进行图像识别和物体检测。
尽管AutoGloon的几个变体版本是为了更好地处理时间序列数据、文本和图像而构建的,但在这里我们将重点关注处理表格数据的变体版本。如果你喜欢这篇文章,并希望未来深入了解它的这个开源库的变体版本,请告诉我。(AutoGloon团队,《AutoGloon:将AutoML用于文本、图像和表格数据》,2020年)
2.AutoML概述
(1)什么是AutoML?
AutoML(Automated Machine Learning,自动化机器学习)的缩写,是一种将机器学习应用于现实世界问题的整个过程自动化的技术。AutoML的主要目标是使机器学习更容易访问和高效,允许人们在不需要深入专业知识的情况下开发模型。正如我们已经看到的,它可以处理数据预处理、特征工程、模型选择和超参数调整等任务,这些任务通常既复杂又耗时(He等,《AutoML:最新技术综述》,2019年)。
多年来,AutoML的概念有了显著的发展。最初,机器学习需要专家的大量手动工作,他们必须仔细选择特征、调整超参数并选择正确的算法。随着该领域的发展,处理越来越大和复杂的数据集的自动化需求也在增长。早期自动化部分流程的努力为现代AutoML系统铺平了道路。如今,AutoML使用集成学习和贝叶斯优化等先进技术,以最少的人为干预创建高质量的模型(Feurer等人,“高效和稳健的自动机器学习”,2年,链接:。
近几年,AutoML领域出现了几家参与研究团队,每个参与者都提供其独特的特征和功能支持。AutoGloon由亚马逊网络服务公司开发,以其在各种数据类型中的易用性和强大性能而闻名(AutoGloon团队,“AutoGlooN:针对文本、图像和表格数据的AutoML”,2020年)。Google Cloud团队研发的AutoML提供了一套机器学习产品,允许开发人员以最小的工作量训练高质量的模型。H2O.ai团队提供了一种H2O AutoML,能够针对监督和非监督学习任务提供自动机器学习功能(H2O.ai团队,“H2O AutoML:可扩展的自动机器学习”,2020年,链接:。DataRobot团队则专注于企业级的AutoML解决方案,旨在为模型部署和管理提供强大的工具支持。微软的Azure机器学习也具有AutoML功能,能够与其他Azure服务无缝集成,形成全面的机器学习解决方案。
(2)AutoML的关键组件
AutoGluon工作流程如下图所示:
AutoGloon工作流
任何机器学习流水线的第一步都是数据预处理。这包括通过处理缺失值、删除重复项和更正错误来清理数据。数据预处理还包括将数据转换为适合分析的格式,例如归一化值、编码分类变量和缩放特征。适当的数据预处理至关重要,因为数据的质量直接影响机器学习模型的性能。
一旦数据被清除,下一步就是特征工程。这个过程包括创建新的特征或修改现有的特征,以提高模型的性能。特征工程可以简单到基于现有数据创建新列,也可以复杂到使用领域知识创建有意义的特征。正确的特征可以显著增强模型的预测能力。
准备好数据并设计好特征后,下一步就是模型选择。有许多算法可供选择,每种算法都有其优缺点,这取决于手头的问题。AutoML系统能够评估多个模型,以确定适合于给定任务的最佳模型。这可能包括比较决策树、支持向量机、神经网络和其他模型,看看哪种模型的数据表现最好。
选择模型后,下一个挑战是超参数优化。超参数是控制机器学习算法行为的设置,例如神经网络中的学习率或决策树的深度。找到超参数的最佳组合可以极大地提高模型性能。AutoML使用网格搜索、随机搜索等技术,以及贝叶斯优化等更先进的方法来自动化这一过程,确保对模型进行微调以获得最佳结果。
最后一步是模型评估和选择。这涉及到使用交叉验证等技术来评估模型对新数据的概括程度。各种性能指标,如准确性、精确度、召回率和F1分数,用于衡量模型的有效性。AutoML系统自动化这一评估过程,确保所选模型最适合给定任务。评估完成后,将选择性能最佳的模型进行部署(AutoGloon团队,《AutoGloon:将AutoML用于文本、图像和表格数据》,2020年)。
(3)AutoML的挑战
虽然AutoML节省了时间和精力,但它在计算资源方面可能要求很高。超参数调整和模型选择等自动化任务通常需要运行多次迭代并训练多个模型,这对无法获得高性能计算的小型组织或个人来说可能是一个挑战。
另一个挑战是需要定制。尽管AutoML系统在许多情况下都非常有效,但它们可能并不总是能立即满足特定的要求。有时,自动化过程可能无法完全捕捉特定数据集或问题的独特方面。用户可能需要调整工作流程的某些部分,如果系统没有提供足够的灵活性或用户缺乏必要的专业知识,这可能会很困难。
尽管存在这些挑战,但AutoML的好处往往大于缺点。它大大提高了生产力,扩大了可访问性,并提供了可扩展的解决方案,使更多的人能够利用机器学习的力量(Feuer等人,《高效和稳健的自动化机器学习》,2年)。
3.AutoGloon库数学理论支持
(1)AutoGloon的架构
AutoGloon的架构旨在自动化从数据预处理到模型部署的整个机器学习工作流程。该体系结构由几个相互连接的模块组成,每个模块负责流程的特定阶段。
第一步是数据模块,它处理加载和预处理数据。该模块处理诸如清理数据、处理缺失值以及将数据转换为适合分析的格式等任务。例如,考虑一个存在缺失值的数据集X。数据模块可以使用平均值或中位数估算这些缺失值:
from sklearn.impute import SimpleImputerimputer = SimpleImputer(strategy='mean')X_imputed = imputer.fit_transform(X)
一旦数据经过预处理,特征工程模块就会接管过来。该组件生成新特征或转换现有特征,以增强模型的预测能力。诸如对分类变量进行一次热编码或为数字数据创建多项式特征之类的技术是常见的。例如,对分类变量进行编码可能如下所示:
from sklearn.preprocessing import OneHotEncoderencoder = OneHotEncoder()X_encoded = encoder.fit_transform(X)
AutoGloon的核心是模型模块。该模块包括一系列机器学习算法,如决策树、神经网络和梯度提升机。它在数据集上训练多个模型并评估它们的性能。例如,决策树可以按照以下方式进行训练:
from sklearn.tree import DecisionTreeClassifiermodel = DecisionTreeClassifier()model.fit(X_train, y_train)
超参数优化模块自动搜索每个模型的最佳超参数。它使用网格搜索、随机搜索和贝叶斯优化等方法。Snoek等人的论文中详细介绍了贝叶斯优化(2012年:,他们建立了一个概率模型来指导搜索过程:
from skopt import BayesSearchCVsearch_space = {'max_depth': (1, 32)}bayes_search = BayesSearchCV(estimator=DecisionTreeClassifier(),search_spaces=search_space)bayes_search.fit(X_train, y_train)
训练后,评估模块使用准确性、精确度、召回率和F1分数等指标评估模型性能。交叉验证通常用于确保模型能够很好地推广到新数据:
from sklearn.model_selection import cross_val_scorescores = cross_val_score(model, X, y, cv=5, scoring='accuracy')mean_score = scores.mean()
AutoGloon的集成模块非常出色,它将多个模型的预测结合起来,生成一个更准确的预测。采用堆叠、装袋和混合等技术。例如,可以使用BaggingClassifier进行装袋:
from sklearn.ensemble import BaggingClassifierbagging = BaggingClassifier(base_estimator=DecisionTreeClassifier(),n_estimators=10)bagging.fit(X_train, y_train)
最后,部署模块负责将最佳模型或集成部署到生产中。这包括导出模型、对新数据生成预测以及将模型集成到现有系统中:
import joblibjoblib.dump(bagging, 'model.pkl')
总之,上述这些组件协同工作,使机器学习管道自动化,使用户能够快速高效地构建和部署高质量的模型。
(2)AutoGloon中的集成学习
集成学习是AutoGloon的一个关键功能,它增强了提供高性能模型的能力。通过组合多个模型,集成方法提高了预测的准确性和稳健性。AutoGloon利用了三种主要的集成技术:堆叠、装袋和混合。
堆叠
堆叠涉及在同一数据集上训练多个基本模型,并将它们的预测用作更高级别模型(通常称为元模型)的输入特征。这种方法利用了各种算法的优势,使集合能够做出更准确的预测。堆叠过程可以用数学表示如下:
堆叠公式
这里,h1表示基本模型,h2是元模型。每个基本模型h1取输入特征xi并产生预测。然后,这些预测被用作元模型h2的输入特征,并最终计算出最终预测值y^。通过组合不同基础模型的输出,堆叠可以捕获数据中更广泛的模式,从而提高预测性能。
袋装
Bagging(Bootstrap Aggregation的缩写)通过在不同的数据子集上训练同一模型的多个实例来提高模型的稳定性和准确性。这些子集是通过对原始数据集进行随机采样并进行替换来创建的。最终预测通常通过对回归任务的所有模型的预测进行平均或通过对分类任务进行多数投票来进行。
从数学上讲,装袋可以表示如下:
对于回归:
Bagging公式中的回归
对于分类:
装袋中的分类
这里,hi表示在数据的不同子集上训练的第i个模型。对于回归,最终预测y^是每个模型所做预测的平均值。对于分类,最终预测y^是模型中最频繁预测的类别。
装袋的方差缩减效果可以用大数定律来说明,该定律指出,来自多个模型的预测的平均值将收敛到期望值,从而减少总体方差,提高预测的稳定性。可以说明为:
装袋中的方差缩减
通过对数据的不同子集进行训练,装袋也有助于减少过拟合并提高模型的可推广性。
混合
混合类似于堆叠,但实现更简单。在混合中,数据被分为两部分:训练集和验证集。基本模型在训练集上进行训练,它们在验证集上的预测用于训练最终模型,也称为混合器或元学习器。混合使用了一个保持验证集,这可以使其更快地实现:
# 简单训练验证拆分的混合示例train_meta, val_meta, y_train_meta, y_val_meta = train_test_split(X, y,test_size=0.2)base_model_1.fit(train_meta, y_train_meta)base_model_2.fit(train_meta, y_train_meta)preds_1 = base_model_1.predict(val_meta)preds_2 = base_model_2.predict(val_meta)meta_features = np.column_stack((preds_1, preds_2))meta_model.fit(meta_features, y_val_meta)
这些技术确保最终预测更加准确和稳健,利用多个模型的多样性和优势来提供卓越的结果。
(3)超参数优化
超参数优化包括为模型找到最佳设置,以最大限度地提高其性能。AutoGloon使用贝叶斯优化、早期停止和智能资源分配等先进技术自动化了这一过程。
贝叶斯优化
贝叶斯优化旨在通过建立目标函数的概率模型来找到最优的超参数集。它使用过去的评估结果来做出下一步要尝试哪些超参数的明智决定。这对于有效地导航大型和复杂的超参数空间特别有用,减少了找到最佳配置所需的评估数量:
贝叶斯优化公式
其中,f(θ)是想要优化的目标函数,例如模型精度或损失值。θ表示超参数。E[f(θ)]是给定超参数θ的目标函数的期望值。
贝叶斯优化包括两个主要步骤:
与网格或随机搜索方法相比,该优化以迭代方式更新代理模型和采集函数以收敛于具有较少评估的最优超参数集。
早停技术
一旦模型在验证集上的性能停止改善,早停技术可以防止过拟合,并通过停止训练过程来减少训练时间。AutoGloon在训练过程中监测模型的性能,并在进一步训练不太可能产生显著改进时停止该过程。这项技术不仅节省了计算资源,而且确保了模型能够很好地推广到新的、看不见的数据:
from sklearn.model_selection import train_test_splitfrom sklearn.metrics import log_lossX_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2)model = DecisionTreeClassifier()best_loss = np.inffor epoch in range(100):model.fit(X_train, y_train)val_preds = model.predict(X_val)loss = log_loss(y_val, val_preds)if loss < best_loss:best_loss = losselse:break
资源配置策略
有效的资源分配在超参数优化中至关重要,尤其是在处理有限的计算资源时。AutoGloon采用了高保真度优化等策略,即系统最初使用数据子集或更少的迭代轮次来训练模型,以快速评估其潜力。然后为有希望的模型分配更多的资源进行彻底评估。这种方法平衡了勘探和开发,确保计算资源得到有效利用:
多保真度优化公式
在这个公式中:
通过最初训练保真度降低的模型(例如,使用更少的数据点或迭代轮次),高保真度优化可以快速识别有希望的候选样本。然后以更高的保真度对这些候选样本进行训练,确保计算资源得到有效使用。这种方法平衡了超参数空间的探索与已知良好配置的利用,从而实现高效和有效的超参数优化。
(4)模型评估和选择
模型评估和选择确保所选模型在新的、看不见的数据上表现良好。AutoGloon使用交叉验证技术、性能指标和自动模型选择标准自动化这一过程。
交叉验证技术
交叉验证包括将数据拆分为多个子集,并在不同的子集上训练模型,同时在其余部分上进行验证。AutoGloon使用k倍交叉验证等技术,将数据划分为k个子集,对模型进行k次训练和验证,每次都以不同的子集作为验证集。这有助于获得对模型性能的可靠估计,并确保评估不会因特定的训练测试划分而产生偏差:
交叉验证精度公式
性能指标
为了评估模型的质量,AutoGloon依赖于各种性能指标,这些指标取决于手头的特定任务。对于分类任务,常见的指标包括准确性、精密度、召回率、F1分数和ROC曲线下面积(AUC-ROC)。对于回归任务,通常使用平均绝对误差(MAE)、均方误差(MSE)和R平方等度量。AutoGloon在评估过程中自动计算这些指标,以便全面了解模型的优势和劣势:
from sklearn.metrics import accuracy_score, precision_score, recall_score,f1_scorey_pred = model.predict(X_val)accuracy = accuracy_score(y_val, y_pred)precision = precision_score(y_val, y_pred)recall = recall_score(y_val, y_pred)f1 = f1_score(y_val, y_pred)
自动模型选择标准
在评估模型后,AutoGloon使用自动标准来选择性能最好的模型。这包括比较不同模型的性能指标,并选择在任务的最相关指标方面表现出色的模型。AutoGloon还考虑了模型复杂性、训练时间和资源效率等因素。自动化的模型选择过程确保所选模型不仅性能良好,而且在现实世界场景中部署和使用也很实用。通过自动化选择,AutoGloon消除了人为偏见,并确保采用一致和客观的方法来选择最佳型号:
best_model = max(models, key=lambda model: model['score'])
4.基于Python的AutoGloon示例工程
在开始使用AutoGloon之前,你需要设置一下开发环境。这涉及到安装必要的库和依赖项等操作。
你可以使用pip安装AutoGloon。为此,只需打开终端或命令提示符,然后运行以下命令:
pip install autogluon
此命令将安装AutoGloon及其所需的依赖项。
接下来,你需要下载数据。你需要安装Kaggle,以便下载本文提供示例的数据集:
pip install kaggle
安装后,通过在终端中运行这些命令下载数据集。请确保你处于与.py文件相同的目录中:
或者,你可以从最近的Kaggle竞赛“基于学术成功数据集的分类”中手动下载数据集。该数据集可免费用于商业用途(。
一旦环境设置好,你就可以使用AutoGloon来构建和评估机器学习模型。首先,你需要加载并准备数据集。AutoGloon使这个过程变得简单明了。假设你有一个名为train.CSV的CSV文件,其中包含你的训练数据:
from autogluon.tabular import TabularDataset, TabularPredictor# 加载数据集train_df = TabularDataset('data/train.csv')
加载数据后,可以使用AutoGloon训练模型。在本例中,我们将训练一个模型来预测名为“target”的目标变量,并使用准确性作为评估指标。我们还将启用超参数调整和自动堆叠,以提高模型性能:
# 训练模型predictor = TabularPredictor(label='Target',eval_metric='accuracy',verbosity=1).fit(train_df,presets=['best_quality'],hyperparameter_tune=True,auto_stack=True)
训练结束后,你可以使用排行榜评估模型的表现,排行榜提供了模型在训练数据上的表现摘要:
#评估模型leaderboard = predictor.leaderboard(train_df, silent=True)print(leaderboard)
排行榜为你提供了AutoGloon训练的所有模型的详细比较。
现在,让我们详细解释一下上面表格中的几个关键列及其含义:
查看一下所提供的排行榜数据,我们可以看到一些模型,如RandomForestEntr_BAG_L1和RandomForest Gini_BAG_L具有完美的训练精度(1000000),但验证精度略低,这表明可能存在过度拟合。WeightedEnsemble_L2结合了1级模型的预测,通常通过平衡其基本模型的强度来显示良好的性能。
LightGBMLarge_BAG_L1和XGBoost_BAG_L1等模型具有竞争性的验证分数以及合理的训练和预测时间,使其成为最终部署方案的有力候选模型。
fit_time和pred_time列提供了对每个模型的计算效率的深入了解,这对实际应用至关重要。
除了排行榜之外,AutoGloon还提供了一些高级功能,允许你自定义训练过程、处理不平衡的数据集和执行超参数调整。
通过调整拟合方法的参数,可以自定义训练过程的各个方面。例如,可以更改训练迭代次数,指定要使用的不同算法,或为每个算法设置自定义超参数。
from autogluon.tabular import TabularPredictor, TabularDataset# 加载数据集train_df = TabularDataset('train.csv')#定义自制超级参数hyperparameters = {'GBM': {'num_boost_round': 200},'NN': {'epochs': 10},'RF': {'n_estimators': 100},}# 使用定制设置训练模型predictor = TabularPredictor(label='Target',eval_metric='accuracy',verbosity=2).fit(train_data=train_df,hyperparameters=hyperparameters)
不平衡的数据集可能具有挑战性,但AutoGloon提供了有效处理这些数据集的工具。可以使用诸如对少数类进行过采样、对多数类进行欠采样或应用成本敏感的学习算法等技术。AutoGloon可以自动检测和处理数据集中的不平衡。
from autogluon.tabular import TabularPredictor, TabularDataset#加载数据集train_df = TabularDataset('train.csv')#通过指定自定义参数处理不平衡的数据集#AutoGloon可以在内部处理此问题,但为了清楚起见,在此处指定hyperparameters = {'RF': {'n_estimators': 100, 'class_weight': 'balanced'},'GBM': {'num_boost_round': 200, 'scale_pos_weight': 2},}# 使用处理不平衡的设置来训练模型predictor = TabularPredictor(label='Target',eval_metric='accuracy',verbosity=2).fit(train_data=train_df,hyperparameters=hyperparameters)
超参数调整对于优化模型性能至关重要。AutoGloon使用贝叶斯优化等先进技术自动完成这一过程。你可以通过在拟合方法中设置hyperparameter_tune=True来启用超参数调整。
from autogluon.tabular import TabularPredictor, TabularDataset# 加载数据集train_df = TabularDataset('train.csv')# 使用超参数优化训练模型predictor = TabularPredictor(label='Target',eval_metric='accuracy',verbosity=2).fit(train_data=train_df,presets=['best_quality'],hyperparameter_tune=True)
超越AutoML模型的可能性
经过上面的AutoGloon库学习之后,不妨让我们继续探讨如何进一步超越AutoML模型。假设你的主要目标是改进损失指标,而不是关注延迟、计算成本或其他指标。
如果你有一个非常适合深度学习的大型数据集,你可能会发现实验深度学习架构更容易。AutoML框架在这一领域往往很困难,因为深度学习需要对数据集有深入的了解,而盲目应用模型可能会非常耗时和耗费资源。以下是一些可以帮助你开始深度学习的资源:
然而,真正的挑战在于用传统的机器学习任务击败AutoML。AutoML系统通常使用集成技术,这意味着你最终可能会做同样的事情。一个好的开始策略可以是首先拟合一个AutoML模型。例如,使用AutoGloon,你可以确定哪些模型表现最好。然后,你可以采用这些模型,重新创建AutoGloon使用的集成架构。通过使用Optuna等技术进一步优化这些模型,你可能获得更好的性能。以下是掌握Optuna的全面指南:
《Optuna的机器学习优化》:介绍如何在Python中微调每个机器学习算法。Optuna机器学习优化的终极指南,实现卓越的模型性能。文章地址:
此外,将领域知识应用于特征工程可以为你提供优势。了解数据的细节可以帮助你创建更有意义的功能,从而显著提高模型的性能。如果可行,请扩充数据集以提供更多不同的训练示例,这有助于提高模型的稳健性。
通过将上述这些策略与从初始AutoML模型中获得的见解相结合,你就可以超越自动化方法并获得更为卓越的训练结果。
结论
AutoGloon通过自动化从数据预处理到模型部署的一切,彻底改变了ML过程。其尖端的架构、强大的集成学习技术和复杂的超参数优化使其成为机器学习新手和经验丰富的数据科学家不可或缺的工具。借助于AutoGloon,你可以将复杂、耗时的任务转换为简化的工作流程,使你能够以前所未有的速度和效率构建顶级模型。
然而,要想真正在机器学习中脱颖而出,就不能仅仅依赖AutoGloon。将其作为启动项目的基础,并深入了解有效的模型策略。然后,以此为基础,深入了解你的数据,并将领域知识应用于功能工程。最后,尝试自定义模型,还要尝试在AutoGloon的初始产品之外对其进行微调。
参考文献
译者介绍
朱先忠,社区编辑,专家博客、讲师,潍坊一所高校计算机教师,自由编程界老兵一枚。
原文标题:AutoML with AutoGluon: ML workflow with Just Four Lines of Code,作者:Cristian Leo
链接:。
想了解更多AIGC的内容,请访问:
AI.x社区