教你用Python实现AutoML

编译作者: 张盛强 2019-01-24 09:00:00

【51CTO.com快译】我们已经知道,机器学习是一种自动解决复杂问题的方法。但机器学习本身可以自动化吗?这是我们在本文中将探讨的内容。读完这篇文章时,你将会知道这个问题的答案,并且会掌握实现 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 命令安装:

  1. pip install auto-keras 

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

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

3.2. Auto-Sklearn

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

  1. pip install auto-sklearn 

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

sudo apt-get install build-essential swig

通过 Anaconda 的安装方式如下:

  1. 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。

  1. !pip install autokeras 

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

  1. from keras.datasets 
  2. import mnist 
  3. from autokeras.image.image_supervised 
  4. import ImageClassifer 

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

  1. (x_train, x_test), (x_test, y_test) = mnist.load_data() 
  2. x_train = x_train.reshape(x_train.shape + (1,)) 
  3. x_test = x_test.reshape(x_test.shape + (1,)) 

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

  1. clf = ImageClassifer(verbose=True
  2. clf.fit(x_train, y_train, time_limit=12 * 60 * 60) 
  3. clf.final_fit(x_train, y_train, x_test, y_test, retrain=True
  4. y = clf.evaluate(x_test, y_test) 
  5. 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 实现非常相似。我们在一个数字数据集上做类似的分类任务。首先, 我们需要导入一些库:

  1. import autosklearn.classification  
  2. import sklearn.model_selection import sklearn.datasets import sklearn.metrics 

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

  1. X, y = sklearn.datasets.load_digits(return_X_y=True
  2. X_train, X_test, y_train, y_test = sklearn.model_selection.train_test_split(X, y, random_state=1) 
  3. automl = autosklearn.classification.AutoSklearnClassifier() 
  4. automl.fit(X_train, y_train) 
  5. y_hat = automl.predict(X_test) 
  6. print("Score of accuracy", sklearn.metrics.accuracy_score(y_test, y_hat)) 

5. What’s Next?

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

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

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

Python AutoML 机器学习
上一篇:Gartner:到2021年70%的企业组织将利用人工智能提高员工生产力 下一篇:想了解机器学习的看过来,一招教你变大神!
评论
取消
暂无评论,快去成为第一个评论的人吧

更多资讯推荐

高位截瘫患者重新行走:靠意念指挥外骨骼,法国脑机接口新突破

依靠介入头部的 2 个传感器,法国里昂的一名瘫痪男子 Thibault 实现了操控外骨骼装备来助力行走。

孙滔 ·  14h前
2008 年预测 2020 年生活方式:基本都实现了

美国皮尤研究中心曾在 2008 年预测 2020 年的生活方式,目前来看,该研究的预测基本已经实现。而对于未来 10 年,也就是 2030 年左右人们的生活,在 2017 年底的世界经济论坛上,800 多名信息和通讯技术领域的技术高管和专家给出了如下预测。

佚名 ·  14h前
机器学习的正则化是什么意思?

正则化的好处是当特征很多时,每一个特征都会对预测y贡献一份合适的力量;所以说,使用正则化的目的就是为了防止过拟合。

佚名 ·  15h前
为什么我的CV模型不好用?没想到原因竟如此简单……

机器学习专家 Adam Geitgey 近日发布了一篇文章探讨了这一简单却又让很多人头痛的问题,并分享了他为解决这一问题编写的自动图像旋转程序。

机器之心 ·  15h前
为了顺应人工智能的潮流,该学Python还是C/C++?答案就在这里

人工智能在现代世界中变得越来越相似,其中一切都是由数据和自动化驱动的。我们将日常生活中的很大一部分用于与智能设备进行交互。人工智能是这一切的核心,它正在成为我们不断变化的生活方式中不可或缺的一部分。

编程小火车 ·  18h前
机器学习与预测分析的区别在何处? 精选

如今,认知学习的应用比以往更为普遍。通常意义上讲,认知学习与认知计算就是涉及AI技术与信号处理的操作过程或技术平台。

读芯术 ·  1天前
大盘点:8月Github上7个值得关注的数据科学项目

本文带你来看看GitHub上创建于2019年8月的7个数据科学项目。笔者所选项目的范围十分广泛,涉及从机器学习到强化学习的诸多领域。

读芯术 ·  1天前
非监督学习最强攻略

本次主要讲解的内容是机器学习里的非监督学习经典原理与算法,非监督,也就是没有target(标签)的算法模型。

SAMshare ·  1天前
Copyright©2005-2019 51CTO.COM 版权所有 未经许可 请勿转载