Pokemogo 2020-09-17
自动机器学习(通常简称为AutoML)是一个新兴的领域,在这个领域中,通过建立机器学习模型来对数据进行建模的过程是自动化的。AutoML能让建模变得更容易,也能让每个人更容易访问。
如果你对AutoML感兴趣,下面这四个Python库是最好的选择!
1.auto-sklearn
auto-sklearn 是一个自动化的机器学习工具库,可与大家都非常熟悉的标准 sklearn 接口无缝集成。通过使用最近的方法,比如贝叶斯优化,该库可被用来导航可能模型的空间,并学会推断特定配置是否能很好地完成给定的任务。
该库由 Matthias Feurer 等人创建,其技术细节在论文《高效和鲁棒的机器学习》中进行了描述,费勒写道:
…我们引入了一个基于scikit-learn的强大的新AutoML系统(使用15个分类器,14个特征预处理方法和4个数据预处理方法,产生了一个包含110个超参数的结构化假设空间)。
auto-sklearn 可能是入门 AutoML 的最佳库了。除了发现数据集的数据准备和模型选择之外,它还可以从相似数据集上表现良好的模型中进行学习,并且可以将效果最佳的模型汇总在一起。
除了高效的实现之外,auto-sklearn 只需要最少的用户交互, 使用 pip install auto-sklearn 即可安装该库。
可以使用的主要类是 AutoSklearnClassifier 和 AutoSklearnRegressor,它们分别用于分类和回归任务。 两者都具有用户指定的相同参数,其中最重要的是时间限制和集合大小。
import autosklearn as ask #ask.regression.AutoSklearnRegressor()用于回归任务 model = ask.classification.AutoSklearnClassifier(ensemble_size=10, #最终集合的大小(最小值为1) time_left_for_this_task=120, #进程运行的秒数 per_run_time_limit=30) #每个模型分配的最大秒数 model.fit(X_train, y_train) #开始拟合搜索模型 print(model.sprint_statistics()) #打印搜索统计信息 y_predictions = model.predict(X_test) #从模型中获得预测
AutoSklearn官方文档:https://automl.github.io/auto-sklearn/master/
2.TPOT
TPOT 是另一个自动化建模的 Python 库,但是该库更加着重于数据准备以及建模算法和模型超参数。它通过一种基于进化树的结构(称为“基于树的管道优化工具(TPOT),可自动设计和优化机器学习管道)来实现特征选择、预处理和构造的自动化。”
程序或管道用树表示。遗传程序选择并进化某些程序,以使每个自动机器学习管道的最终结果最大化。
正如 Pedro Domingos 所说,“垃圾算法遇上海量数据也比数据有限的聪明算法强大。”事实也是如此:TPOT 可以生成复杂的数据预处理管道。
TPOT管道优化器可能需要几个小时才能产生很好的结果,就像很多AutoML算法一样(除非数据集很小)。你也可以在 Kaggle committes 或 googlecolab 中运行这些长程序。
import tpot pipeline_optimizer = tpot.TPOTClassifier(generations=5, #进行训练的迭代次数 population_size=20, #训练的数据量 cv=5) #StratifiedKFold中的倍数 pipeline_optimizer.fit(X_train, y_train) #适配管道优化器-可能需要很长时间print(pipeline_optimizer.score(X_test, y_test)) #打印管道评分 pipeline_optimizer.export('tpot_exported_pipeline.py') #导出管道-用Python代码!
TPOT 的最好功能是将模型导出为Python代码文件,这样可以方便以后使用。
TPOT 官方文档:https://epistasislab.github.io/tpot/
TPOT 示例:https://epistasislab.github.io/tpot/examples/
3.HyperOpt
HyperOpt 是由 James Bergstra 开发用于贝叶斯优化的 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 模型的文档:http://hyperopt.github.io/hyperopt-sklearn/。
虽然 HyperOpt 库比 auto-sklearn、TPOT复杂得多,但是如果对于你的模型而已,超参数非常重要,那就值得你去把它用起来。
4.AutoKeras
与标准的机器学习库相比,神经网络和深度学习功能更强大,因此更难实现自动化。
使用 AutoKeras,神经结构搜索算法可以找到最佳的结构,如一个层中的神经元数量、层的数量、要合并的层、特定于层的参数,如过滤器大小或丢失神经元的百分比等。一旦搜索完成,可以将该模型用作普通的 TensorFlow/Keras 模型。
通过使用AutoKeras,我们可以构建一个包含复杂元素(如嵌入和空间缩减)的模型,这些元素对于仍在学习深度学习过程中的人来说是不太容易访问的。
当 AutoKeras 为我们创建模型时,许多预处理,如矢量化或清除文本数据,都会为您完成并优化。
启动和训练搜索需要两条线。AutoKeras 拥有一个类似 Keras 的界面,所以它不难记住和使用。
AutoKeras 支持文本、图像和结构化数据,以及为初学者和寻求更多技术细节的人提供的界面,AutoKeras 使用进化神经结构搜索方法为我们消除繁重的工作和模糊性。
虽然 AutoKeras 运行需要很长时间,但是有许多用户指定的参数可用于控制运行时间、探索的模型数量、搜索空间大小等。
考虑使用 AutoKeras 生成的文本分类任务的这种经过考虑的体系结构。
Hyperparameter |Value |Best Value So Far 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
AutoKeras 教程:https://towardsdatascience.com/automl-creating-top-performing-neural-networks-without-defining-architectures-c7d3b08cddc
AutoKeras官方文档:https://autokeras.com/
对比:你应该用哪一个AutoML库?
如果你的首要任务是需要一个干净,简单的界面和相对快速的结果,请选择使用auto-sklearn。此外:该库与sklearn的自然集成,可与常用的模型和方法一起使用,这样可以对时间有更多的控制作用。
如果你的首要任务是高准确度,不考虑可能需要的长时间训练,则使用TPOT。强调高级预处理方法,通过将管道表示为树结构而成为可能。额外提示:TPOT可以为最佳模型输出Python代码。