黄刚的技术 2020-10-13
机器学习(AutoML)是一个新兴领域,其中用来建模数据的机器学习模型是一个自动化的过程,AutoML的功能使建模更为轻松。如果对AutoML感兴趣,笔者向你推荐以下4个必学的Python库。
1.auto-sklearn
auto-sklearn是一个自动机器学习工具包,无缝集成业内许多人都熟悉的标准sklearn界面。通过使用贝叶斯优化等最新方法,构建库来导航可能的模型空间,并学习推断特定的配置是否能很好地完成给定任务。
这个库是由Matthias Feurer等人创建,其技术细节在一篇名为《高效和鲁棒机器学习》的论文中进行了描述。Feurer写道:“我们引入了一个基于scikit-learn的新鲁棒性自动系统——使用15个分类器、14个特征预处理方法和4个数据预处理方法生成110个超参数的结构化假设空间。”
auto-sklearn可能是入门AutoML的最佳库。除了挖掘数据集的数据准备和模型选择之外,它还能学习类似数据集上性能良好的模型。
图源:Efficient and Robust Automated Machine Learning(2015)
在有效实施的基础上,auto-sklearn将所需用户交互降至最低。可以使用pip install auto-sklearn来安装库。
可以使用的两大类是Auto Sklearn Classifier和Auto Sklearn Regressor,分别用于分类和回归任务。两者都有相同的用户指定参数,其中最重要的是时间限制和集成大小。
import autosklearn as ask #ask.regression.AutoSklearnRegressor()for regression tasks model =ask.classification.AutoSklearnClassifier(ensemble_size=10, #size of the endensemble (minimum is 1) time_left_for_this_task=120, #the number ofseconds the process runs for per_run_time_limit=30) #maximum secondsallocated per model model.fit(X_train, y_train) #begin fittingthe search model print(model.sprint_statistics()) #printstatistics for the search y_predictions = model.predict(X_test) #get predictionsfrom the model
2.TPOT
TPOT是另一个自动化建模管道的Python库,它更强调数据准备、建模算法和模型超参数。它通过一种进化的基于树结构自动化特征选择、预处理和构造,“该结构称为基于树管道优化工具(TPOT),可以自动设计和优化机器学习管道。”
图源:数据科学自动化中基于树的流水线优化工具的评价(2016)
程序或管道以树状图呈现。遗传程序选择并进化某些程序,以最大化每个自动机器学习管道的最终结果。
正如Pedro Domingos所说:“一个拥有大量数据的愚蠢算法胜过一个拥有有限数据的聪明算法。”事实确实如此,TPOT可以生成复杂的数据预处理管道。
图源:TPOT documentation
就像许多AutoML算法一样,TPOT管道优化器可能要花几个小时才能产生好的结果,你可以在Kaggle commits或者谷歌Colab中运行这些长时间的程序。
import tpot pipeline_optimizer = tpot.TPOTClassifier(generations=5, #number ofiterations to run the training population_size=20, #number ofindividuals to train cv=5) #number of foldsin StratifiedKFold pipeline_optimizer.fit(X_train, y_train) #fit thepipeline optimizer - can take a long time print(pipeline_optimizer.score(X_test, y_test)) #print scoringfor the pipeline pipeline_optimizer.export( tpot_exported_pipeline.py ) #export thepipeline - in Python code!
也许TPOT的最佳特性是可以将模型导出为Python代码文件,方便以后使用。
3.HyperOpt
由James Bergstra开发的HyperOpt是一个用于贝叶斯优化的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, presort= auto , random_state=2, subsample=0.6844206624548879, tol=0.0001, validation_fraction=0.1, verbose=0, warm_start=False), preprocs : (), ex_preprocs : ()}
构建HyperOpt-sklearn模型的文档提到,它比auto-sklearn要复杂得多,比TPOT稍微复杂一点。但如果超参数的作用很重要,那么多余的繁琐工作也是值得的。
4.AutoKeras
与标准的机器学习库相比,神经网络和深度学习要强大得多,因此也更难实现自动化。
AutoKeras支持文本、图像和结构化数据,并为初学者和那些希望深入技术知识的人提供接口,AutoKeras使用进化神经结构搜索方法来消除困难和歧义。尽管AutoKeras运行的时间很长,但有许多用户指定的参数可用来控制运行时间、探索的模型数量、搜索空间大小等。
Hyperparameter |Value |BestValueSoFar text_block_1/block_type|transformer|transformer classification_head_1/dropout|0 |0 optimizer |adam |adam learning_rate |0.001 |0.001 text_block_1/max_tokens|20000 |20000 text_block_1/text_to_int_sequence_1/output_sequence_length|200 |200 text_block_1/transformer_1/pretraining|none |none text_block_1/transformer_1/embedding_dim|32 |32 text_block_1/transformer_1/num_heads|2 |2 text_block_1/transformer_1/dense_dim|32 |32 text_block_1/transformer_1/dropout|0.25 |0.25 text_block_1/spatial_reduction_1/reduction_type|global_avg|global_avg text_block_1/dense_block_1/num_layers|1 |1 text_block_1/dense_block_1/use_batchnorm|False |False text_block_1/dense_block_1/dropout|0.5 |0.5 text_block_1/dense_block_1/units_0|20 |20
应该使用哪一个自动库呢?
想实现自动化,千万不要错过这四个库。