朱先忠
梁策 孙淑娟
AutoML简介
自动机器学习能够自动运行各种机器学习过程,并优化错误度量以生成最佳模型这些过程包括数据预处理,编码,缩放,优化超参数,模型训练,生成制品和结果列表自动化机器学习过程可以快速开发人工智能解决方案,让用户体验变得友好,并通常以低代码即可生成准确结果
目前市场上流行的一些著名AutoML库包括:
LightAutoMLMLJarEvalMLFLAMLPyCaretAutoGluonH2O 3
在这篇教程中,我们将使用美国1994年人口普查时的收入数据来预测一个人的年收入是否超过5万美元这是一个经典的二分类问题,我们将在CC0公共域许可下使用Kaggle成人普查收入数据集进行预测该数据由美国硅图公司数据挖掘和可视化部门的罗尼middot,克哈伊和巴里middot,贝克尔从美国1994年人口普查局数据库中提供但是,我们这里不去深入研究数据分析或模型工作方式,只是仅用几行代码来构建一个优化的机器学习模型,并使用FastAPI服务器对该模型进行访问
AutoXGB项目简介
AutoXGB是一个开源,简单,有效的AutoML辅助开发工具,可以直接从CSV文件中训练模型表格数据集AutoXGB使用XGBoost来训练模型,使用Optuna进行超参数优化,并使用基于Python的FastAPI框架并以API的形式提供模型推理
下面让我们从安装AutoXGB开始介绍如果在运行服务器时遇到错误,请确保预先已正确安装了FastAPI框架和unvicorn服务器程序
pip install autoxgb初始化
接下来,我们将深入介绍AutoXGB函数的特征,以及如何使用与之相关的各项参数来改进计算结果或减少训练时间。AutoXGB函数的各项参数含义说明如下:
train_filename:训练数据所在的路径output:存储工件的输出文件夹的路径test_filename:测试数据所在路径如果未指定,则仅保存折外预测数据task:如果未指定该参数值,系统将自动推断其值
1."classification"
2."regression"
idx:如果未指定该参数值,系统将自动使用名称id生成 id列targets:如果未指定该参数值,则假定目标列被命名为目标,并将该问题视为一个二分类,多类分类或单列回归三种问题之一
1.
2.
features:如果未指定该参数值, 除去id,targets和kfold列外的所有列都会被使用。指定值方式例如:
1.features =
categorical_features:如果未指定该参数值,将自动推断分类列。。指定值方式例如:
1.categorical_features =
use_gpu:如果未指定该参数值,将不启用GPU计算功能。指定值方式例如:
1.use_gpu = True
2.use_gpu = False
num_folds:用来进行交叉验证的折的个数seed:随机种子的重复性num_trials:运行的Optuna试验次数,默认值为1000time_limit:以秒计量的optuna试验时限
1.如果未指定,将运行所有试验此时有time_limit = None
fast:如果fast参数值设置为True,超参数调整将只使用一次,从而减少优化时间之后,将在折的其余部分进行训练,并生成OOF和测试预测
在我们的测试项目中,除了参数train_filename,output,target,num_folds,seed,num_trails和time_limit之外,我们将大多数参数的值设置为默认值。结果,奥克斯的想法一提出就被马斯克拒绝,还遭到马斯克的训斥。项目中各参数的完整设置情况,如下所示:
from autoxgb import AutoXGBtrain_filename = "binary_classification.csv"output = "output"test_filename = Nonetask = Noneidx = Nonetargets = features = Nonecategorical_features = Noneuse_gpu = Falsenum_folds = 5seed = 42num_trials = 100time_limit = 360fast = False训练与优化
现在,我们可以使用AutoXGB函数定义模型,并将之前定义的参数添加到模型中最后,我们将调用axgb.train函数开始训练过程此时,将运行XGBoost和Optuna,并输出各种制品
axgb = AutoXGBaxgb.train
训练过程耗时10—12分钟,我们可以看到下面的最佳训练结果,并可以通过增加时间限制来提高F1分数此外,我们还可以使用其他超参数来提高模型性能
autoxgb.utils:predict_model:336 — Metrics: 'auc': 0.851585935958628, 'logloss': 0.3868651767621002, 'f1': 0.5351485750859325, 'accuracy': 0.8230396087432015, 'precision': 0.7282822005864846, 'recall': 0.42303153575005525使用CLI命令行进行训练
为了使用bash终端方式进行模型训练,我们可以使用命令autoxgb train此时,我们将只需设置train_filename和output两个参数即可其中,参数train_filename用于确定训练的二分类文件名,而参数output用于指出输出文件夹位置
autoxgb train ——train_filename binary_classification.csv ——output output Web API
通过在终端中运行autoxgb 服务的方式,我们可以在本地运行FastAPI服务器。
AutoXGB服务参数model_path:指向模型文件的路径在本文测试中,指向输出文件夹Port:服务器主机运行的端口号,值为8080host:运行的服务器主机,IP地址是:0.0.0.0workers:工作线程数或同时请求的数量debug:显示错误和成功的日志
我们提供了运行服务器的模型路径,主机ip和端口号。
!autoxgb serve ——model_path /work/output ——host 0.0.0.0 ——port 8080 ——debug
我们可以添加随机输入来预测某人的收入是否超过5万美元在本例中,我们使用FastAPI/docs选项访问用户界面
输入数据
我们使用FastAPI GUI来运行模型预测,这可以通过在服务器地址末尾添加/docs实现,例如172.3.167.43:39118/docs。本文项目中输入的其他测试数据如下:
workclass:"Private"education:"HS—grad"marital.status:"Widowed"occupation:"Transport—moving"relationship:"Unmarried"race:"White"sex:"Male"native.country:"United—States"age:20fnlwgt:313986education.num:9capital.gain:0capital.loss:0hours.per.week:40
测试结果
实验的结果是:小于5万美元的置信度为97.6%,而大于5万美元的置信度为2.3%。知情人士称,马斯克在开会的时候已经很生气了,因为Autopilot在他早上开车的时候就出了故障。
使用Request库进行测试
你还可以借助Python中的requests库来测试API这一步很简单,你只需以字典的形式推送参数,然后就可以通过JSON格式获得输出结果
import requestsparams = "workclass": "Private", "education": "HS—grad", "marital.status": "Widowed", "occupation": "Transport—moving", "relationship": "Unmarried", "race": "White", "sex": "Male", "native.country": "United—States", "age": 20, "fnlwgt": 313986, "education.num": 9, "capital.gain": 0, "capital.loss": 0, "hours.per.week": 40,article = requests.postdata_dict = article.jsonprint## 'id': 0, 'lt,=50K': 0.9762147068977356, 'gt,50K': 0.023785298690199852有关项目源码
如果对本文项目的完整代码及有关示例感兴趣,请访问下面几个链接:
DeepnoteGitHubDAGsHub结论
我本人曾借助AutoXGB并使用AutoML在Kaggle竞赛中获得过优异成绩,并为一些机器学习项目开发过一个基础模型在整个机器学习过程中,有时结果可以快速而准确的获得,但如果想要创建最先进的解决方案,则需要手动尝试各种机器学习过程
本教程带我们学习了AutoXGB的各种功能,现在我们可以使用AutoXGB预处理数据,训练XGboost模型,使用Optuna优化模型,以及FastAPI运行Web服务器简而言之,AutoXGB能够为日常表格数据问题提供端到端的解决方案
译者介绍
。声明:本网转发此文章,旨在为读者提供更多信息资讯,所涉内容不构成投资、消费建议。文章事实如有疑问,请与有关方核实,文章观点非本网观点,仅供读者参考。