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

让机器学习自动帮我们建模,这4个Python库能让你大开眼界

时间:2023-03-21 13:44:47 科技观察

AutomatedMachineLearning(通常缩写为AutoML)是一个新兴领域,在该领域中,机器学习模型被构建为建模数据的过程是自动化的。AutoML使建模更容易,每个人都更容易访问。如果你对AutoML感兴趣,下面这四个Python库是不二之选!1.auto-sklearnnauto-sklearn是一个自动化的机器学习工具库,可以和大家非常熟悉的标准sklearn接口无缝集成。使用贝叶斯优化等最新方法,该库可用于导航可能模型的空间并学习推断特定配置是否适用于给定任务。该库由MatthiasFeurer等人创建,其技术细节在论文《高效和鲁棒的机器学习》中进行了描述,其中Feurer写道:......我们介绍了一个基于scikit-learn的强大的新AutoML系统(使用15个分类器,14个特征预处理方法和4种数据预处理方法,产生110个超参数的结构化假设空间)。auto-sklearn可能是开始使用AutoML的最佳库。除了发现数据集的数据准备和模型选择外,它还从在类似数据集上表现良好的模型中学习,并可以将表现最佳的模型汇集在一起??。除了是一个高效的实现之外,auto-sklearn还需要最少的用户交互,并且可以使用pipinstallauto-sklearn安装该库。可以使用的主要类是AutoSklearnClassifier和AutoSklearnRegressor,它们分别用于分类和回归任务。两者都具有相同的用户指定参数,其中最重要的是时间限制和集合大小。importautosklearnasak#ask.regression.AutoSklearnRegressor()用于回归任务model=ask.classification.AutoSklearnClassifier(ensemble_size=10,#最终集合的大小(最小值为1)time_left_for_this_task=120,#秒数processrunsper_run_time_limit=30)#每个模型分配的最大秒数model.fit(X_train,y_train)#开始拟合搜索模型print(model.sprint_statistics())#打印搜索统计y_predictions=model.predict(X_test)#GetpredictionsfromthemodelAutoSklearn官方文档:https://automl.github.io/auto-sklearn/master/2.TPOTTPOT是另一个用于自动化建模的Python库,但是这个库更侧重于数据准备和建模算法和模型超参数。它通过称为“基于树的管道优化工具(TPOT)”的基于进化树的结构自动进行特征选择、预处理和构建,该工具可自动设计和优化机器学习管道。用于程序或管道表达的树。遗传程序选择并进化某些程序,以最大化每个自动化机器学习管道的最终结果。正如PedroDomingos所说,“拥有大量数据的垃圾算法比拥有有限数据的智能算法更强大。”这是真的:TPOT可以生成复杂的数据预处理管道。TPOT管道优化器可能需要数小时才能产生良好的结果,就像许多AutoML算法一样(除非数据集很小)。您还可以在Kagglecommittes或googlecolab中运行这些长程序。importtpotpipeline_optimizer=tpot.TPOTClassifier(generations=5,#训练迭代次数population_size=20,#训练数据量cv=5)#StratifiedKFoldmultiplespipeline_optimizer.fit(X_train,y_train)#Adaptationpipelineoptimizer-可能需要很长时间print(pipeline_optimizer.score(X_test,y_test))#Printpipelinescorepipeline_optimizer.export('tpot_exported_pipeline.py')#Exportpipeline-使用Python代码!TPOT最大的特点就是可以将模型导出为Python代码文件,方便以后使用。TPOT官方文档:https://epistasislab.github.io/tpot/TPOT示例:https://epistasislab.github.io/tpot/examples/3.HyperOptHyperOpt是由JamesBergstra开发的一个用于贝叶斯优化的Python库。该库专为具有数百个参数的模型的大规模优化而设计,可明确用于优化机器学习管道,并提供跨多个内核和机器选择优化过程的选项。然而,HyperOpt很难直接使用,因为它非常技术化,需要仔细指定优化步骤和参数。相反,我建议使用HyperOpt-sklearn,它是sklearn库的HyperOpt包装器。具体来说,HyperOpt确实支持预处理,但重点仍然在于特定模型中的许多超参数。如果我们仔细观察HyperOpt-sklearn的一个搜索结果,它会导致一个没有预处理的梯度提升分类器:{'learner':GradientBoostingClassifier(ccp_alpha=0.0,criterion='friedman_mse',init=None,learning_rate=0.009132299586303643,loss='deviance',max_depth=None,max_features='sqrt',max_leaf_nodes=None,min_impurity_decrease=0.0,min_impurity_split=None,min_samples_leaf=1,min_samples_split=2,min_weight_fraction_leaf=0.0,n_estimators=342,n_iter_no_change=None,预排序='auto',random_state=2,subsample=0.6844206624548879,tol=0.0001,validation_fraction=0.1,verbose=0,warm_start=False),'preprocs':(),'ex_preprocs':()}用于构建HyperOpt-文档sklearn模型:http://hyperopt.github.io/hyperopt-sklearn/。虽然HyperOpt库比auto-sklearn和TPOT复杂得多,但如果超参数对你的模型非常重要,还是值得使用的。4.AutoKeras神经网络和深度学习比标准机器学习库更强大,因此更难实现自动化。使用AutoKeras,NeuralArchitectureSearch算法找到最佳架构,例如一层中的神经元数量、层数、要合并的层、特定于层的参数(例如滤波器大小或缺失神经元的百分比等)。一次搜索完成,模型可以作为普通的TensorFlow/Keras模型使用。通过使用AutoKeras,我们可以构建一个包含复杂元素(例如嵌入和空间缩减)的模型,这些元素对于那些仍在学习深度学习过程的人来说并不是很容易理解。当AutoKeras为我们创建模型时,许多预处理,如矢量化或清理文本数据,已经为您完成并优化。需要两行来启动和训练搜索。AutoKeras具有类似Keras的界面,因此不难记忆和使用。AutoKeras支持文本、图像和结构化数据,并为初学者和那些寻找更多技术细节的人提供了一个界面,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/max_tokens_1/max_tokens_20000|20000|20000|20000|20000|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://towardsdatascience.com/automl-creating-top-performing-neural-networks-without-defining-architectures-c7d3b08cddcAutoKeras官方文档:https://autokeras.com/对比:你应该使用哪个AutoML库?如果您的首要任务是干净、简单的界面和相对较快的结果,请选择使用auto-sklearn。此外:该库与sklearn的自然集成适用于常用的模型和方法,从而可以更好地控制时间。如果您优先考虑高精度,请使用TPOT,而不管训练时间可能很长。强调高级预处理方法,通过将管道表示为树结构而成为可能。额外提示:TPOT可以输出最佳模型的Python代码。如果您优先考虑高精度而不管训练时间可能很长,则可以使用HyperOptsklearn。强调模型的超参数优化,不知道会不会有效果,具体情况看数据集和算法。如果您的问题需要神经网络来解决,尤其是文本或图像形式的问题,请使用AutoKeras。虽然训练确实需要很长时间,但有许多措施可以控制搜索空间的时间和大小。