自动化机器学习(AutomatedMachineLearning,AutoML)是一个新兴的领域,将机器学习模型构建到模型数据的过程自动化。AutoML使建模更容易,每个人都更容易访问。在这篇文章中,作者详细介绍了四个自动化ML工具包,分别是auto-sklearn、TPOT、HyperOpt和AutoKeras。如果您对AutoML感兴趣,这四个Python库是您的最佳选择。作者还在文末对比了四个工具包。auto-sklearnauto-sklearn是一个自动化机器学习工具包,它与标准sklearn界面无缝集成,因此社区中的许多人都熟悉该工具。使用贝叶斯优化等最新方法,该库用于导航模型的可能空间并学习推理特定配置是否适用于给定任务。该图书馆由MatthiasFeurer等人提出。技术细节请参考论文《Efficient and Robust Machine Learning》。Feurer在这篇论文中写道:我们提出了一种基于scikit-learn的新型鲁棒AutoML系统,该系统使用15个分类器、14种特征预处理方法和4种数据预处理方法生成一个具有110个超参数的结构化假设空间。auto-sklearn可能最适合AutoML新用户。除了发现数据集的数据准备和模型选择外,图书馆还可以从在类似数据集上表现良好的模型中学习。表现最好的模型聚集在一个整体中。图片来源:《Efficient and Robust Automated Machine Learning》在高效实施方面,auto-sklearn需要最少的用户交互。使用pipinstallauto-sklearn安装库。该库可以使用的两个主要类是AutoSklearnClassifier和AutoSklearnRegressor,它们分别用于分类和回归任务。两者都有相同的用户指定参数,其中最重要的是时间限制和集合大小。importautosklearnasask#ask.regression.AutoSklearnRegressor()forregressiontasksmodel=ask.classification.AutoSklearnClassifier(ensemble_size=10,#sizeoftheendensemble(minimumis1)time_left_for_this_task=120,#thenumberofsecondstheprocessrunsforper_run_time_limit=30)#maximumsecondsallocatedpermodelmodel.fit(X_train,y_train)#beginfittingthesearchmodelprint(model.sprint_statistics())#printstatisticsforthesearchy_predictions=model.predict(X_test)#getpredictionsfromthemodel更多AutoSklearn相关文档请参考:https://automl.github.io/auto-sklearn/master/。TPOTTPOT是另一个基于Python的自动化机器学习开发工具,更侧重于数据准备、建模算法和模型超参数。它通过基于树的流水线优化工具(Tree-basedPipelineOptimizationTool,TPOT)实现特征选择、预处理和构建的自动化,自动设计和优化机器学习流水线。资料来源:《Evaluation of a Tree-based Pipeline Optimization Tool for Automating Data Science》。程序或管道表示为树。遗传程序(GP)选择并进化某些程序,以最大化每个自动化机器学习管道的最终结果。正如PedroDomingos所说,“具有大量数据的愚蠢算法优于具有有限数据的智能算法”。事情是这样的:TPOT可以生成复杂的数据预处理管道。潜在管道(图片来源:TPOT文档)TPOT管道优化器可能需要数小时才能产生良好的结果,就像许多AutoML算法一样(除非数据集很小)。用户可以在Kaggle提交或GoogleColab中运行这些耗时的程序。importtpotpipeline_optimizer=tpot.TPOTClassifier(generations=5,#numberofiterationstorunthetrainingpopulation_size=20,#numberofindividualstotraincv=5)#numberoffoldsinStratifiedKFoldpipeline_optimizer.fit(X_train,y_train)#fitthepipelineoptimizer-cantakealongtimeprint(pipeline_optimizer.score(X_test,y_test))#printscoringforthepipelinepipeline_optimizer.export('tpot_exported_pipeline.py')#exportthepipeline-inPythoncode!也许TPOT最好的特性是它将模型导出为Python代码文件,以后可以使用。具体文档和教程示例见以下两个链接:TPOT文档地址:https://epistasislab.github.io/tpot/。TPOT的教程示例地址:https://epistasislab.github.io/tpot/examples/HyperOptHyperOpt是一个用于贝叶斯优化的Python库,由JamesBergstra开发。该库专为具有数百个参数的模型的大规模优化而设计,明确用于优化机器学习管道,并可选择跨多个内核和机器扩展优化过程。然而,HyperOpt很难直接使用,因为它非常技术化,需要仔细指定优化器和参数。相反,作者建议使用HyperOpt-sklearn,这是一个包含sklearn库的HyperOpt包装器。具体来说,HyperOpt在支持预处理的同时,非常关注进入特定模型的数十个超参数。作为HyperOptsklearn搜索的结果,它生成了一个没有预处理的梯度提升分类器:{'learner':GradientBoostingClassifier(ccp_alpha=0.0,criterion='friedman_mse',init=None,learning_rate=0.009132299586303643,loss='deviance',max_depth=无,max_features='sqrt',max_leaf_nodes=无,min_impurity_decrease=0.0,min_impurity_split=无,min_samples_leaf=1,min_samples_split=2,min_weight_fraction_leaf=0.0,n_estimators=342,n_iter_no_auchto'',random_state=2,subsample=08.684=0.0001,validation_fraction=0.1,verbose=0,warm_start=False),'preprocs':(),'ex_preprocs':()}如何构建HyperOpt-sklearn模型可以查看源文档。它比auto-sklearn复杂得多,比TPOT复杂一点。但如果超参数很重要,这可能是值得的。文档地址:http://hyperopt.github.io/hyperopt-sklearn/AutoKeras与标准的机器学习库相比,神经网络和深度学习更强大,因此更难实现自动化。AutoKeras库有什么好处?详情如下:使用AutoKeras,神经框架搜索算法可以找到最优架构,例如单个网络层中的神经元数量、层数、要合并的层数以及过滤器的大小或lossofneuronsindropout特定于层的参数,例如元百分比。搜索完成后,用户可以将其作为普通的TF/Keras模型使用;借助AutoKeras,用户可以构建包含嵌入和空间缩减等复杂元素的模型,这对于学习深度学习过程的人来说并不容易。易于访问;使用AutoKeras创建模型时,可以完成和优化许多预处理操作,例如矢量化或清理文本数据;需要两行代码来初始化和训练搜索。AutoKeras具有类似keras的界面,因此不难记忆和使用。AutoKeras支持文本、图像和结构化数据,为初学者和那些寻求更多相关技术知识的人提供了一个界面。AutoKeras使用进化神经网络架构搜索方法来减轻研究人员繁重和模糊的工作。虽然AutoKeras可能需要很长时间才能运行,但用户可以指定参数来控制运行时间、探索模型的数量、搜索空间的大小等。超参数|value|bestvaluesofartext_block_1/block_type|transformer|transformerClassification_head_1/droptout|0|0optimizer|adam|adamlearning_rate|0.001|0.001text_block_1/axnement_1/max_tokens_20000|20000|20000|20000|20000|20000|20000年/embedding_dim|32|32text_block_1/transformer_1/num_heads|2|2text_block_1/transformer_1/dense_dim|32|32text_block_1/transformer_1/dropout|0.25|0.25text_block_1/spatial_reduction_1/reduction_type|global_avg|global_avgtext_block_1/dense_text_block_1/1dense_layers_1/1dense_layers_block_1/1dense_layers_1use_batchnorm|False|Falsetext_block_1/dense_block_1/dropout|0.5|0.5text_block_1/dense_block_1/units_0|20|20AutoKeras的相关内容请参考以下两个链接:文档地址:https://autokeras.com/教程地址:https://towardsdatascience.com/automl-creating-top-performing-neural-networks-without-defining-architecture-c7d3b08cddc四个库各有特色,你应该选择哪一个?用户可以根据自己的需要选择合适的Python库。笔者给出以下几点建议:如果你的首要任务是获得干净、简单的界面和相对快速的结果,请选择auto-sklearnPlus:该库与sklearn自然集成,可以使用常用的模型和方法,并且可以很好地控制时间;如果你的首要任务是达到高精度,不需要考虑长时间的训练,那就用TPOT吧。奖励:输出最佳模型的Python代码;如果你的首要任务是实现高精度并且你仍然不需要考虑长时间训练,你也可以选择使用HyperOpt-sklearn。该库强调模型的超参数优化,是否有成果取决于数据集和算法;如果您需要神经网络(警告:不要高估它们的能力),请使用AutoKeras,尤其是文本或图像形式。训练确实需要很长时间,但是有很多措施来控制时间和搜索空间大小。参考链接:https://towardsdatascience.com/4-python-automl-libraries-every-data-scientist-should-know-680ff5d6ad08【本文为机器之心专栏原文翻译,微信公众号《机器之心(id:almosthuman2014)》】点此查看该作者更多好文
