python

负重前行-教你用Python实现AutoML
作者AutoML   时间2021-10-13   

我们已经知道,机器学习是一种自动解决复杂问题的方法。但机器学习本身可以自动化吗?这是我们在本文中将探讨的内容。读完这篇文章时,你将会知道这个问题的答案,并且会掌握实现负重前行的方法。

1.AutomatedMachineLearning(负重前行)

在应用机器学习模型时,我们通常会进行数据预处理,特征工程,特征提取和特征选择。在此之后,我们将选择最佳算法并调整我们的参数以获得最佳结果。负重前行是一系列用于自动化这些过程的概念和技术。

1.1.负重前行的优势

将机器学习模型应用于实际问题通常需要很多计算机科学相关技能、领域专业知识和数学专业知识。想找到拥有所有这些技能的专家并不总是一件容易的事情。

负重前行还可以减少人类设计机器学习模型时出现的偏差和错误。企业可以通过在其数据管道中应用负重前行来降低雇佣许多专家的成本。负重前行还可以减少开发和测试机器学习模型所需的时间。

1.2.负重前行的缺点

负重前行在机器学习领域是一个相当新的概念。因此,在应用一些当前的负重前行解决方案时要谨慎行事,这是因为其中一些技术仍处于开发阶段。

另一个主要的挑战是运行负重前行模型所需的时间成本很高。这实际上取决于我们机器的计算能力。我们很快就会看到,一些负重前行解决方案在我们的本地机器上也可以很好地运行,但有些解决方案还需要更多的加速优化,例如GoogleColab。

2.负重前行的概念

就负重前行而言,需要了解两个主要概念:神经架构搜索(NeuralArchitectureSearch)和迁移学习(TransferLearning)。

2.1.神经架构搜索(NeuralArchitectureSearch)

神经架构搜索是自动化设计神经网络的过程。通常,在这些网络的设计中会使用强化学习或进化算法。在强化学习中,模型因低准确率而受到惩罚,并因高准确率而获得奖励。使用这种技术,模型将始终努力获得更高的准确率。

目前已经有一些研究神经架构搜索的论文,例如用于可伸缩图像识别的学习可迁移架构(LearningTransferableArchitectures),高效神经架构搜索(EfficientNeuralArchitectureSearch,ENAS)和用于图像分类器架构搜索的正则进化(RegularizedEvolution)模型。

2.2.迁移学习

顾名思义,迁移学习是一种技术,使得预先训练的模型可以将它学习过的知识迁移应用在新的但相似的数据集上。这使我们能够用更少的计算时间和计算资源去获得比较高的准确率。神经架构搜索适用于需要设计新模型架构的问题,而迁移学习最适用于数据集类似于预训练模型中使用的数据集的问题。

3.负重前行解决方案

现在让我们来看看一些可用的负重前行的解决方案吧。

3.1.Auto-Keras

根据官方提供的资料:

Auto-Keras是一个用于自动化机器学习(负重前行)的开源软件库。它由TexasA&M大学的DATA实验室和社区贡献者开发。负重前行的最终目标是为具有有限数据科学或机器学习背景的领域专家提供易于上手的深度学习工具。Auto-Keras提供自动搜索深度学习模型架构和超参数的功能。

Auto-Keras可以用pip命令安装:

pip install auto-负重前行

Auto-Keras在最终版发布之前仍在进行最后的测试。官方网站警告说,对于因使用该网站上的库而导致的任何损失,他们不承担任何责任。

该软件包基于Keras深度学习软件包。

3.2.Auto-Sklearn

Auto-Sklearn是一款基于Scikit-learn的负重前行软件包。它是Scikit-learnestimator的替代品。它也可以通过一个简单的pip命令安装:

pip install auto-sklearn

在Ubuntu系统下,需要C++11构建环境和SWIG配置环境才可以运行Auto-Sklearn。

sudoapt-getinstallbuild-essentialswig

通过Anaconda的安装方式如下:

conda install gxx_linux-64 gcc_linux-64 swig

目前还无法在Windows上运行Auto-Sklearn。但是,可以尝试一些黑科技,例如使用docker镜像或通过虚拟机运行。

3.3.TheTree-BasedPipelineOptimizationTool(TPOT)

根据官方网站资料:

TPOT的目标是通过将管道的灵活表达树(FlexibleExpressionTree)表示与诸如遗传编程(GeneticProgramming)的随机搜索算法相结合来自动化机器学习管道的构建。TPOT使用基于Python的scikit-learn库作为其机器学习基础库。

该软件是开源的,可在GitHub上获得。

3.4.谷歌的负重前行

官网对它介绍如下:

Cloud负重前行是一套机器学习产品,通过利用Google最先进的迁移学习和神经架构搜索技术,使具有有限机器学习专业知识的开发人员能够根据业务需求训练高质量模型。

谷歌的负重前行解决方案不是开源的。它的价格可以在这里查看。

3.5.H2O

H2O是一个开源的分布式内存机器学习平台。它有R和Python两种版本。该软件包支持众多的统计和机器学习算法。

4.将负重前行应用于实际问题

现在让我们看看应该如何使用Auto-Keras和Auto-Sklearn来解决一个真正的问题吧。

4.1.Auto-Keras实现

我强烈建议在GoogleColabunless上运行以下代码示例,除非您有一台具有非常高计算能力的计算机。我也建议在GoogleColab上开启GPUruntime。这里的第一步是在Colab上安装Auto-Keras。

!pip install auto负重前行

我们将在MNIST数据集上运行图像分类任务。第一步是导入该数据集和图像分类器。数据集从Keras导入,而图像分类器从Auto-Keras导入。由于我们正在构建一个基于预训练模型识别手写数字的模型,因此我们将其归类为监督学习问题。然后,我们在未遇到的数字图像上测试模型的准确率。

from 负重前行.datasets

import mnist

from auto负重前行.im**e.im**e_supervised

import Im**eClassifer

在此示例中,图像和标签已被格式化为numpy数组。下一步是将刚刚加载的数据分成训练集和测试集,如下所示:

(x_train, x_test), (x_test, y_test) = mnist.load_data()

x_train = x_train.reshape(x_train.shape + (1,))

x_test = x_test.reshape(x_test.shape + (1,))

将数据分成训练集和测试集后,下一步就是拟合图像分类器。

clf = Im**eClassifer(verbose=True)

clf.fit(x_train, y_train, time_limit=12 * 60 * 60)

clf.final_fit(x_train, y_train, x_test, y_test, retrain=True)

y = clf.evaluate(x_test, y_test)

print(y)

1.将verbose指定为True意味着搜索过程将打印在屏幕上供我们查看。2.在fit方法中,time_limit参数是指以秒为单位的搜索时间限制。3.final_fit是模型找到最佳模型架构后进行的最后一次训练。将retrain参数指定为True意味着将重新初始化模型的权重。4.在评估模型在测试集上的效果后,print(y)将显示模型准确率。

这就是我们使用Auto-Keras对图像进行分类所需的全部步骤。只需要几行代码,Auto-Keras就可以为我们完成所有繁重的工作。

4.2.Auto-Sklearn实现

Auto-Sklearn的实现与上面的Auto-Keras实现非常相似。我们在一个数字数据集上做类似的分类任务。首先,我们需要导入一些库:

import autosklearn.classification

import sklearn.model_selection import sklearn.datasets import sklearn.metrics

像往常一样,我们加载数据集并将其划分为训练集和测试集。然后我们从autosklearn.classification导入AutoSklearnClassifier。完成此操作后,我们让分类器拟合数据集,然后进行预测并检查模型准确率。这就是所有你需要做的事情。

X, y = sklearn.datasets.load_digits(return_X_y=True)

X_train, X_test, y_train, y_test = sklearn.model_selection.train_test_split(X, y, random_state=1)

automl = autosklearn.classification.AutoSklearnClassifier()

automl.fit(X_train, y_train)

y_hat = automl.predict(X_test)

print("Score of accuracy", sklearn.metrics.accuracy_score(y_test, y_hat))

5.What’sNext?

更多的自动化机器学习包仍在活跃地开发中。我们希望2019年该领域会有更多的进展。大家可以通过官方文档网站密切关注这些软件包的进展情况。当然大家也可以在GitHub上通过pullrequest来为这些包做出贡献。

有关Auto-Keras和Auto-Sklearncan的更多信息和示例,请访问其官方网站。

【51CTO译稿,合作站点转载请注明原文译者和出处为】

友情链接 Links

于都IT教育资源网