编辑推荐: |
在本文中,将介绍一种AutoML设置,使用Python、Flask在云中训练和部署管道;以及两个可自动完成特征工程和模型构建的AutoML框架。
本文来自于搜狐网,由火龙果软件Alice编辑、推荐。 |
|
AutoML到底是什么?
AutoML是一个很宽泛的术语,理论上来说,它囊括从数据探索到模型构建这一完整的数据科学循环周期。但是,我发现这个术语更多时候是指自动的特征预处理和选择、模型算法选择和超参数调优,这些步骤处在数据科学流程的末端。
流程中的早期步骤,即数据探索、清理和特征工程很难自动化,因为它们既需要专业知识,也需要人为判断。令人高兴的是,AutoML可让模型选择和开发等工作中冗长单调的步骤实现自动化,从而解放数据科学家,让他们关注更有趣的工作。
下面我将详细介绍部署AutoML服务的经验。
五个主要的要点
1.AutoML可为模型选择和优化提供切实的好处。
2.它非常容易入手。很多AutoML框架都与scikit-learn或其他广受欢迎的数据科学工具兼容。
3.AutoML探索的算法和参数领域要比一般的数据科学工作流程更为广阔。您是不是墨守成规,还拘泥于Random
Forest或Gradient Boosted Trees?AutoML可以帮助您巧妙地探索新的、有效的方法。
4.要获得最优结果,需要更长时间的训练(从数小时到几天),并使用不同参数多次运行。
5.使用目前可用的开源工具,可以建立一个完全自动化的时序分类管道。
自动化的特征工程和模型构建
我测试并组合使用过两款开源Python工具:tsfresh,这是一款自动化的特征工程工具;TPOT,一款自动化的特征预处理和模型优化工具。结果得到一个自动化的时序分类管道,可以用它来针对多维度、任意形状的数据构建模型。
用于时序分类的自动化管道
虽然总的来说,自动化的特征工程是一个难题,但在时序数据方面近期有一些进步。数据科学家使用傅里叶分析来例行创建特征,范围从时域摘要统计到更先进的频域特征。tsfresh
库可为您执行这些计算,还能提供更先进的功能。
构建特征之后,TPOT可以在后台使用遗传算法智能地构建特征预处理和建模管道。例如,使用基因编程的随机方法要比网格搜索方法更有优势,原因在于它能偏离无效管道,还能返回数据科学家未知的全新管道。本质上来说,自动建模管道开发可以改进最终模型,同时向数据科学家揭示新的方法。
TPOT针对每个管道计算使用K次交叉验证,默认情况下是优于过度拟合的。嵌套的交叉验证方法对管道性能的预估所产生的偏差更少,但在计算上非常耗费资源。
我们可以在上述这些库中加入几行代码。例如,使用fit模型以scikit-learn的方式训练TPOT。上述是一种方法,还有很多其他AutoML库可以使用。
部署AutoML云服务
我想扩展这个方法,在云中部署它,并使用Flask将其提供给API。我这么做是出于几个原因。最主要的原因是将机器学习管道部署为服务是将数据科学模型投入生产的好方法。而且通过运用灵活的设计,我们可以并行分析多个模型,而这通常是现实工作中对部署模型的要求。
这个管道可以部署到任意支持Python的云环境中。在Pivotal,我们经常使用Cloud Foundry,它具备非常好的生产级优势,包括自动环境设置、扩展性好、负载均衡、内置的安全性以及其他生产优势。
该应用通过一个RESTful API提供模型训练和模型预测功能。对于模型训练,输入数据和标签通过POST请求发送,管道得到训练,模型预测结果通过预测路由进行访问。此外,管道使用唯一的键进行存储,因此可以使用不同的特征构建和建模管道对同一数据做出实时预测。
模型训练通过HTTP POST请求发起。通过包含的参数文件,各种自动化的特征工程和模型构建管道可以得到计算并与不同的管道ID保持一致。
模型训练逻辑表示为REST端点。原始的带标签训练数据通过POST请求上传,制定一个最优的建模管道。
参数文件包含用于特征工程和模型构建的选项:
由于特征工程是自动化的,特征计算就不再是特定于数据集的,因此可以针对不同时间窗口的不同数据集训练管道。extract_features参数是特定于tsfresh
extract_features模块的。请参阅此文档了解更多信息。
POST请求包括原始数据、标签和参数:
注意:一般来说,分类程序运行的时间越长,搜索的模型空间越大,模型的结果越好。TPOT的作者建议模型运行的时长应该按小时或天,而不是按分钟计。
在应用特征工程例程之后,会选择建模管道,并返回一个拟合管道:
在此示例中,构建的是堆叠管道,在输入逻辑回归模型时先构建合成特征,但是也考虑了很多方法。
在搜索过程中,TPOT会评估很多不同的算法、超参数和预处理例程。这种做法与每个已评估的模型类型的模型性能(AUC)向对应。
在确定最优的特征工程和模型构建管道之后,我们的管道保存在Flask应用的Python目录中,该目录的键就是参数文件中指定的管道ID。
训练之后,已训练的建模管道将对传入的原始数据执行实时的预测。
已训练管道的预测通过REST API执行
原始数据和参数仍是通过POST请求发送:
返回的JSON对象包含每个示例ID和一个预测结果:
通过在PSOT请求中指定管道ID,我们可以使用每个建模管道返回多个预测结果。
最终,我们可以使用已训练模型查看已训练管道的列表:
在实践中,如果不把已训练管道保存在Python目录中,我们可以把管道保存在Redis或Pivotal
Cloud Cache等数据缓存中。这样一来,其他应用和应用的多个实例都可以访问已训练的管道。
可扩展的训练和模型提供架构
总结
AutoML已经可以加入到数据科学工作流程中,代替效率不高的网格搜索和冗长单调的模型开发流程。与传统方法相比,AutoML通常可以改进模型性能,同时为构建颖的建模管道提供思路。自动化的特征工程是一个比较难以掌握的问题,但在一些用例中,可以利用一些有效的工具。我展示了如何利用开源的AutoML工具,以及如何将可扩展的自动化特征工程和模型构建管道放入云中。 |