AutoML 是当前深度学习领域的热门话题。只需要很少的工作,AutoML 就能通过快速有效的方式,为你的 ML 任务构建好网络模型,并实现高准确率。简单有效!数据预处理、特征工程、特征提取和特征选择等任务皆可通过 AutoML 自动构建。
我们提出了一个新的、基于 scikit-learn 的鲁棒 AutoML 系统,其中使用 15 个分类器、14 种特征预处理方法和 4 种数据预处理方法,生成了一个具有 110 个超参数的结构化假设空间。
import autosklearn as ask
#ask.regression.AutoSklearnRegressor() for regression tasks
model = ask.classification.AutoSklearnClassifier(ensemble_size=10, #size of the end ensemble (minimum is 1)
time_left_for_this_task=120, #the number of seconds the process runs for
per_run_time_limit=30) #maximum seconds allocated per model
model.fit(X_train, y_train) #begin fitting the search model
print(model.sprint_statistics()) #print statistics for the search
y_predictions = model.predict(X_test) #get predictions from the model
import tpot
pipeline_optimizer = tpot.TPOTClassifier(generations=5, #number of iterations to run the training
population_size=20, #number of individuals to train
cv=5) #number of folds in StratifiedKFold
pipeline_optimizer.fit(X_train, y_train) #fit the pipeline optimizer - can take a long time
print(pipeline_optimizer.score(X_test, y_test)) #print scoring for the pipeline
pipeline_optimizer.export('tpot_exported_pipeline.py') #export the pipeline - in Python code!
TPOT 文档地址:https://epistasislab.github.io/tpot/
TPOT 的教程示例地址:https://epistasislab.github.io/tpot/examples/
{'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': ()}
通过 AutoKeras,神经框架搜索算法可以找到最佳架构,如单个网络层中的神经元数量、层数量、要合并的层、以及滤波器大小或 Dropout 中丢失神经元百分比等特定于层的参数。一旦搜索完成,用户可以将其作为普通的 TF/Keras 模型使用;
通过 AutoKeras,用户可以构建一个包含嵌入和空间缩减等复杂元素的模型,这些元素对于学习深度学习过程中的人来说是不太容易访问的;
当使用 AutoKeras 创建模型时,向量化或清除文本数据等许多预处理操作都能完成并进行优化;
初始化和训练一次搜索需要两行代码。AutoKeras 拥有一个类似于 keras 的界面,所以它并不难记忆和使用。
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
如果你的首要任务是获取一个干净、简单的界面和相对快速的结果,选择 auto-sklearn。另外:该库与 sklearn 自然集成,可以使用常用的模型和方法,能很好地控制时间;
如果你的首要任务是实现高准确率,并且不需要考虑长时间的训练,则使用 TPOT。额外收获:为最佳模型输出 Python 代码;
如果你的首要任务是实现高准确率,依然不需要考虑长时间的训练,也可选择使用 HyperOpt-sklearn。该库强调模型的超参数优化,是否富有成效取决于数据集和算法;
如果你需要神经网络(警告:不要高估它们的能力),就使用 AutoKeras,尤其是以文本或图像形式出现时。训练确实需要很长时间,但有很多措施可以控制时间和搜索空间大小。