经过本文,你将了解如何借助开源库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社区