当前位置: 首页 > 科技观察

使用开源项目AutoXGB助力AutoML开发,实现几行代码构建应用API_0

时间:2023-03-14 22:50:39 科技观察

译者|朱宪忠评论|梁策孙淑娟AutoML最佳模型介绍。这些过程包括数据预处理、编码、缩放、优化超参数、模型训练、生成工件和结果列表。自动化机器学习过程可以快速开发用户友好的AI解决方案,并且通常可以通过低代码生成准确的结果。目前市场上流行的一些知名AutoML库包括:LightAutoMLMLJarEvalMLFLAMLPyCaretAutoGluonH2O3在这个在本教程中,我们将使用美国1994年的人口普查收入数据来预测一个人的年收入是否超过50,000美元。这是一个经典的二元分类问题,我们将使用CC0公共领域许可下的Kaggle成人人口普查收入数据集进行预测。数据由硅图公司(SGI,SiliconGraphics)数据挖掘和可视化部门的RonnyKohavi和BarryBecker从美国1994年人口普查局数据库中提供。但是,我们不会在这里深入研究数据分析或模型的工作原理,而只是使用几行代码来构建优化的机器学习模型并使用FastAPI服务器访问模型。AutoXGB项目介绍AutoXGB是一个开源、简单、有效的AutoML辅助开发工具,可以直接从CSV文件训练模型表格数据集。AutoXGB使用XGBoost(优化的分布式梯度增强库)训练模型,使用Optuna(专为机器学习和深度学习设计的自动超参数优化框架)进行超参数优化,并使用基于Python的FastAPI框架和API形式提供模型推理。让我们从安装AutoXGB开始。如果您在运行服务器时遇到错误,请确保您事先已经正确安装了FastAPI框架和unvicorn服务器程序。安装AutoXGB的命令如下:pipinstallautoxgbinitialization接下来我们将深入介绍AutoXGB函数的特点,以及如何使用与其相关的各种参数来提高计算结果或减少训练时间。AutoXGB函数参数含义解释如下:train_filename:训练数据所在路径。output:存储工件的输出文件夹的路径。test_filename:测试数据所在路径。如果未指定,将仅保存折叠外预测(“OOF预测”)数据。task:如果不指定参数值,系统会自动推断其值。该参数有两个值:1."classification"2."regression"idx:如果不指定该参数值,系统将自动使用名称id生成id列。targets:如果不指定该参数值,则假定目标列名为target,将问题视为二元分类、多类分类或单列回归问题。该参数可以使用以下两个值:1.["target"]2.["target1","target2"]features:如果不指定该参数值,将使用除id、targets和kfold列以外的所有列use.指定值的方式例如:1.features=["col1","col2"]categorical_features:如果不指定参数值,将自动推断分类列。指定值的方式例如:1.categorical_features=["col1","col2"]use_gpu:如果不指定参数值,则不会启用GPU计算功能。指定值的方式例如:1.use_gpu=True2.use_gpu=Falsenum_folds:用于交叉验证的折叠数。seed:随??机种子的可重复性。num_trials:要运行的Optuna试验次数;默认为1000。time_limit:optuna测试时间限制,以秒为单位。1.如果未指定,将运行所有试验。此时(默认)有time_limit=None。fast:如果fast参数值设置为True,超参数调整将只使用一次,减少优化时间。之后,将对其余部分进行训练,并生成OOF和测试预测。在我们的测试项目中,除了参数train_filename、output、target、num_folds、seed、num_trails和time_limit之外,我们将大部分参数的值设置为默认值。项目中各个参数的完整设置如下:fromautoxgbimportAutoXGBtrain_filename="binary_classification.csv"output="output"test_filename=Nonetask=Noneidx=Nonetargets=["income"]features=Nonecategorical_features=Noneuse_gpu=Falsenum_folds=5seed=42num_trials=100time_limit=360fast=False训练和优化现在我们可以使用AutoXGB函数定义模型,并将之前定义的参数添加到模型中。最后,我们将调用axgb.train()函数开始训练过程。此时,XGBoost和Optuna将运行并输出各种工件(包括模型、预测、结果、配置、参数、编码器等)。axgb=AutoXGB(train_filename=train_filename,output=output,test_filename=test_filename,task=task,idx=idx,targets=targets,features=features,categorical_features=categorical_features,use_gpu=use_gpu,num_folds=num_folds,num_trials=种子,num_trials,time_limit=time_limit,fast=fast,)axgb.train()训练过程需要10-12分钟,我们可以在下面看到最好的训练结果,可以通过增加时间限制来提高F1分数。此外,我们可以使用其他超参数来提高模型性能。2022-02-0918:11:27.163|信息|autoxgb.utils:predict_model:336-Metrics:{'auc':0.851585935958628,'logloss':0.3868651767621002,'f1':0.5351485750859325,'accuracy':0.8230396087432015,'precision':0.7282822005864846,'recall':0.42303153575005525}TrainingusingtheCLI命令行为了使用bash终端进行模型训练,我们可以使用命令autoxgbtrain。此时,我们只需要设置train_filename和output这两个参数即可。其中,参数train_filename用于确定训练二进制分类文件名,参数output用于表示输出文件夹位置。命令如下:autoxgbtrain\--train_filenamebinary_classification.csv\--outputoutput\WebAPI通过在终端运行autoxgb服务,我们可以在本地运行FastAPI服务器。AutoXGB服务参数model_path:模型文件的路径。在此测试中,指向输出文件夹。Port:服务器主机的运行端口号,值为8080。host:运行的服务器主机,IP地址为:0.0.0.0。workers:工作线程数或并发请求数。debug:显示错误和成功日志。在Deepnote云服务器上运行为了在云上运行服务器,Deepnote使用ngrok创建了一个公共URL。我们只需要启用该选项并使用8080端口即可。当然,如果你是在本地运行,则不需要这一步,直接使用地址“http://0.0.0.0:8080”即可。我们提供服务器运行的模型路径、主机ip和端口号。!auto??xgbserve--model_path/work/output--host0.0.0.0--port8080--debug结果表明我们的API运行顺利。您可以使用网址https://8d3ae411-c6bc-4cad-8a14-732f8e3f13b7.deepnoteproject.com观察相应的结果数据。信息:将监视这些目录中的更改:['/work']信息:Uvicorn在http://0.0.0.0:8080上运行(按CTRL+C退出)信息:使用watchgodINFO启动重新加载进程[153]:已启动服务器进程[163]信息:等待应用程序启动。信息:应用程序启动完成。信息:172.3.161.55:40628-“GET/docsHTTP/1.1”200OKINFO:172.3.188.123:38788-“GET/openapi.jsonHTTP/1.1"200OKINFO:172.3.167.43:48326-"GET/docsHTTP/1.1"200OKINFO:172.3.161.55:47018-"GET/openapi.jsonHTTP/1.1"200OK预测我们可以添加随机输入来预测某些此人的收入是否超过50,000美元。在此示例中,我们使用FastAPI/docs选项访问用户界面。输入数据我们使用FastAPIGUI运行模型预测,可以通过在服务器地址末尾添加/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测试结果实验结果为:置信度小于$50,000是97.6%,并且大于50,000美元,置信水平为2.3%。使用Request库进行测试您还可以借助Python中的requests库来测试API。这一步很简单,只需要将参数以字典的形式推送,即可得到JSON格式的输出结果。importrequestsparams={"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.post(f"https://8d3ae411-c6bc-4cad-8a14-732f8e3f13b7.deepnoteproject.com/predict",json=params,)data_dict=article.json()print(data_dict)##{'id':0,'<=50K':0.9762147068977356,'>50K':0.023785298690199852}如果你对本文源码如对项目完整代码及相关示例感兴趣,请访问以下链接:DeepnoteGitHubDAGsHub结论我用过AutoXGB,用过AutoML,效果非常好在Kaggle比赛中。并为一些机器学习项目开发了一个基础模型。在整个机器学习过程中,有时可以快速准确地获得结果,但如果要创建最先进的解决方案,则需要手动尝试各种机器学习过程。本教程带我们学习了AutoXGB的各种功能,现在我们可以使用AutoXGB预处理数据,训练XGboost模型,使用Optuna优化模型,使用FastAPI运行Web服务器。简而言之,AutoXGB能够为日常表格数据问题提供端到端的解决方案。译者介绍朱宪忠,51CTO社区编辑,51CTO专家博主,讲师,潍坊某高校计算机教师,自由编程资深人士。早期专注于各种微软技术(编译成三本与ASP.NETAJX和Cocos2d-X相关的技术书籍)。/ESP32/RaspberryPi等物联网开发技术和Scala+Hadoop+Spark+Flink等大数据开发技术。原标题:NoBrainerAutoMLwithAutoXGB,作者:AbidAliAwan