教你用Python实现AutoML
1. Automated Machine Learning(AutoML)
在应用机器学习模型时,我们通常会进行数据预处理,特征工程,特征提取和特征选择。在此之后,我们将选择最佳算法并调整我们的参数以获得最佳结果。AutoML 是一系列用于自动化这些过程的概念和技术。
1.1. AutoML 的优势
将机器学习模型应用于实际问题通常需要很多计算机科学相关技能、领域专业知识和数学专业知识。想找到拥有所有这些技能的专家并不总是一件容易的事情。
AutoML 还可以减少人类设计机器学习模型时出现的偏差和错误。企业可以通过在其数据管道中应用 AutoML 来降低雇佣许多专家的成本。AutoML 还可以减少开发和测试机器学习模型所需的时间。
1.2. AutoML 的缺点
AutoML 在机器学习领域是一个相当新的概念。因此,在应用一些当前的 AutoML 解决方案时要谨慎行事,这 是因为其中一些技术仍处于开发阶段。
另一个主要的挑战是运行 AutoML 模型所需的时间成本很高。这实际上取决于我们机器的计算能力。我们很 快就会看到,一些 AutoML 解决方案在我们的本地机器上也可以很好地运行,但有些解决方案还需要更多的加速优化,例如 Google Colab。
2. AutoML 的概念
就 AutoML 而言,需要了解两个主要概念:神经架构搜索(Neural Architecture Search)和迁移学习(Transfer Learning)。
2.1. 神经架构搜索(Neural Architecture Search)
神经架构搜索是自动化设计神经网络的过程。通常,在这些网络的设计中会使用强化学习或进化算法。在强化 学习中,模型因低准确率而受到惩罚,并因高准确率而获得奖励。使用这种技术,模型将始终努力获得更高的 准确率。
目前已经有一些研究神经架构搜索的论文,例如用于可伸缩图像识别的学习可迁移架构(LearningTransferable Architectures),高效神经架构搜索(Efficient Neural Architecture Search,ENAS)和用于图像分类器架构搜 索的正则进化(Regularized Evolution)模型。
2.2. 迁移学习
顾名思义,迁移学习是一种技术,使得预先训练的模型可以将它学习过的知识迁移应用在新的但相似的数据 集上。这使我们能够用更少的计算时间和计算资源去获得比较高的准确率。神经架构搜索适用于需要设计新 模型架构的问题,而迁移学习最适用于数据集类似于预训练模型中使用的数据集的问题。
3. AutoML 解决方案
现在让我们来看看一些可用的 AutoML 的解决方案吧。
3.1. Auto-Keras
根据官方提供的资料:
Auto-Keras 是一个用于自动化机器学习(AutoML)的开源软件库。 它由 Texas A & M 大学的 DATA 实验室和社区贡献者开发。 AutoML 的最终目标是为具有有限数据科学或机器学习背景的领域专家提供易于上手的深度学习工具。 Auto-Keras 提供自动搜索深度学习模型架构和超参数的功能。
Auto-Keras 可以用 pip 命令安装:
pip install auto-keras
Auto-Keras 在最终版发布之前仍在进行最后的测试。官方网站警告说,对于因使用该网站上的库而导致的任何损失,他们不承担任何责任。
该软件包基于 Keras 深度学习软件包。
3.2. Auto-Sklearn
Auto-Sklearn 是一款基于 Scikit-learn 的 AutoML 软件包。它是 Scikit-learn estimator 的替代品。它也可以通过一个简单的 pip 命令安装:
pip install auto-sklearn
在 Ubuntu 系统下,需要 C++ 11 构建环境和 SWIG 配置环境才可以运行 Auto-Sklearn。
sudo apt-get install build-essential swig
通过 Anaconda 的安装方式如下:
conda install gxx_linux-64 gcc_linux-64 swig
目前还无法在 Windows 上运行 Auto-Sklearn。但是,可以尝试一些黑科技,例如使用 docker 镜像或通过虚拟机运行。
3.3. The Tree-Based Pipeline Optimization Tool(TPOT)
根据官方网站资料:
TPOT 的目标是通过将管道的灵活表达树 (Flexible Expression Tree) 表示与诸如遗传编程 (Genetic Programming) 的随机搜索算法相结合来自动化机器学习管道的构建。 TPOT 使用基于 Python 的 scikit-learn 库作为其机器学习基础库。
该软件是开源的,可在GitHub上获得。
3.4. 谷歌的 AutoML
官网对它介绍如下:
Cloud AutoML 是一套机器学习产品,通过利用 Google 最先进的迁移学习和神经架构搜索技术,使具有有 限机器学习专业知识的开发人员能够根据业务需求训练高质量模型。
谷歌的 AutoML 解决方案不是开源的。它的价格可以在这里查看。
3.5. H2O
H2O 是一个开源的分布式内存机器学习平台。它有 R 和 Python 两种版本。该软件包支持众多的统计和机器 学习算法。
4. 将 AutoML 应用于实际问题
现在让我们看看应该如何使用 Auto-Keras 和 Auto-Sklearn 来解决一个真正的问题吧。
4.1. Auto-Keras 实现
我强烈建议在 Google Colabunless 上运行以下代码示例,除非您有一台具有非常高计算能力的计算机。我也 建议在 Google Colab 上开启 GPU runtime。 这里的第一步是在 Colab 上安装 Auto-Keras。
!pip install autokeras
我们将在 MNIST 数据集上运行图像分类任务。第一步是导入该数据集和图像分类器。数据集从 Keras 导入, 而图像分类器从 Auto-Keras 导入。由于我们正在构建一个基于预训练模型识别手写数字的模型,因此我们将 其归类为监督学习问题。然后,我们在未遇到的数字图像上测试模型的准确率。
from keras.datasets import mnist from autokeras.image.image_supervised import ImageClassifer
在此示例中,图像和标签已被格式化为 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 = ImageClassifer(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’s Next?