免费GPU!平民玩家的机器学习春天来了!

 

文-William Koehrsen
译- Allen
首发于微信公众号优达学城(ID:youdaxue)
原文- https://towardsdatascience.com/automated-machine-learning-on-the-cloud-in-python-47cf568859f

近年来,数据科学呈现出了两个明显的趋势:

 

1.越来越多的数据分析和模型训练通过云计算完成

 

2.机器学习工作流水线(英文名称为pipeline)自身正在通过算法进行优化

 

使用Google Colab进行云计算

 

如今,几乎每个人都拥有自己的计算机。但笔记本电脑和台式电脑一般只适用于日常性的工作。而如今机器学习要处理的数据集越来越大,对算力的要求也越来越高,利用云计算进行机器学习几乎是普通用户的不二选择。

 

在本文,我们将用云上的Jupyter Notebook来运行一个简单的数据工作流程。使用的是Google最新的黑科技Google Colab——一个免费在线的Jupyter Notebooks(目前只有Python内核)。这个产品的出现意味着无论你身处哪里,个人电脑是否带在身边,只要能联网,就可以跑自己的机器学习模型。Google的虚拟机上已经配置好了大部分你所需要的数据科学库,无需配置环境就可以直接使用,而且还可以免费使用一个NVIDIA Tesla K80 GPU!!!

 

 

 

 

要使用Colab,你只需要能够联网(国内的同学需要科学上网)以及一个Google账号。事不宜迟,赶紧跟随我一起来探索Google Colab吧。这篇文章对应的notebook在这里:https://colab.research.google.com/drive/1CIVn-GoOyY3H2_Bv8z09mkNRokQ9jlJ-

复制到Chrome浏览器,直接打开,需要登录Google账号。打开之后的界面是下面这样的,点击文件>在云端硬盘中保存一份副本。然后你就可以在自己的Drive上打开这个文件进行编辑和运行。

 

 

 

 

可以说,Google Colab明显降低了利用云计算的门槛。不难想象,类似的在线资源在日后将会越来越容易获得。对于已经在本地电脑用过Jupyter Notebooks的同学来说,这是一个向云计算过渡的好机会。

 

适用TPOT进行机器学习自动化

 

接下来,向同学们介绍另外一样神器——机器学习自动化(缩写为Auto-ml)。它能够通过算法为特定的问题设计和优化机器学习工作流水线。在本文中,机器学习流水线包括以下几个步骤:


1.特征预处理: 填充缺失值,缩放,构建新的特征

2.特征选择:降维

3.模型选择:对多个模型进行评估

4.调参:找到最佳的模型超参数设置

 

对以上的四个步骤进行组合你可以得到几乎无限多种流水线,而每个问题的最佳解决方式都不一样。设计一个机器学习流水线是一个非常消耗时间以及容易踩坑的过程,所以我们一般无法遍历所有流水线,也就是说你永远不知道你设计出来的流水线是不是最优的。这个时候,机器学习自动化出现了,它可以帮助你评估成千上万种可能的流水线的表现,自动找出最优的(或接近最优的)解决方案。

 

 

机器学习只是数据科学的一部分,机器学习自动化并不意味着可以替代数据科学家。相反,机器学习自动化可以解放数据科学家的双手,让他们可以专注于更有价值的部分,比如数据收集、模型解释等等

 

目前已经有许多机器学习自动化的工具——H20、auto-sklearn、Google Cloud AutoML以及接下来我要重点介绍的TPOT(Tree-based Pipeline Optimization Tool,树型流水线优化工具)。TPOT主要是基于遗传算法的原理来寻找最佳的机器学习流水线。

 

 

 

遗传算法对于建立机器学习模型的主要好处就是深度的探索。对于人来说,即使没有时间的限制,也无法尝试完所有的预处理、模型、超参数的组合,毕竟个人的知识和想象力是有限的。而遗传算法对于任何机器学习流水线都不会有初始的偏见(人类可能会根据自己的经验,产生一些偏见),每一条流水线都会被客观地评估。此外,遗传算法中的适应度函数使得流水线探索空间中,最有潜力的组合区域比表现差的区域探索地更为彻底,这也是遗传算法的一大优势。

 

两者相结合:云上的机器学习自动化

 

来来来,这个实现其实很简单!有了前面所述的背景,我们就可以愉快地在Google Colab上使用TPOT来实现机器学习的自动化。

 

我们接下来尝试去解决一个监督回归的问题 : 通过纽约市的能源数据,我们希望预测出建筑物的能源星级。笔者曾经手动地进行特征工程、降维、模型筛选、调参,最后训练出了一个Gradient Boosting 回归模型,在测试集上的平均绝对误差是9.06。让我们来看看自动化后得到的模型性能如何?

 

数据集包含了几十个连续型数值变量(比如建筑的能源使用量和建筑面积)以及两个独热编码的分类变量(地区名与建筑类型),总计有82个特征。

 

 

 

 

首先,我们需要确定在Google Colab的环境里面是否已经安装了TPOT。一般来说,大多数的数据科学包都已经安装好了,如果要添加新的包,可以使用如下的命令(记得在前面加“!”):

 

 

 


在读取数据后,我们通常会填充缺失的值以及将特征归一化。好消息是,除了前面所述的特征工程、模型选择、调参,TPOT还会自动填充缺失值和进行特征缩放!所以,我们下一步只需要创建TPOT优化器就可以了。

 

使用默认参数,TPOT优化器会创建100个流水线,每个流水线演化100代,得出这1万个流水线的评分。使用十折交叉验证,这意味着将有10万次训练要跑!即使我们使用的是Google的计算资源,但还是会有时间限制的。为了避免超出Colab服务器的使用时限(Google只允许12个小时的连续运行时间),我们将设置TPOT的运行时间最大为8小时,尽管TPOT的一般运行时间是几天,但是通过几个小时的优化,我们仍然能得到不错的模型。

 

我们将设置如下的参数:

● scoring = neg_mean_absolute error : 回归表现的评估指标

● max_time_minutes = 480: 限制运行时间为8小时

● n_jobs = -1: 使用计算机上的所有可用核心

● verbosity = 2: 训练时显示有限的信息

● cv = 5: 使用5折交叉验证(默认值为10)

 

当然,还有其他的参数可以设置,但是它们保留默认值也适用于大多数情况,在这里就不再另外设置。

 

TPOT优化器的语法设计与Scikit-Learn模型相同,因此我们可以使用.fit方法训练优化器。

 

 

 

在训练过程中,我们获得了如下的信息:

 

 



由于时间限制,每个流水线只能演化15代,这意味着我们评估了1500个不同的独立流水线的得分,已经比我们手动尝试要多得多了!

 

一旦模型训练好了,我们可以通过 tpot.fitted_pipeline_ 查看最优的流水线。我们还可以将模型保存到一个Python脚本中:

 

 

 

 

由于我们使用的是Google Colab notebook,如果我们要从服务器上将这个流水线下载到本地,则需要使用Google Colab的文件管理库:

 

 

 

 

 

我们可以打开 tpot_exported_pipeline.py 文件查看完整的流水线:

 

 

 

(这个文件的下载地址在文末)

 

我们可以看到,优化器已经为我们填充了缺失值并且建立了一个完整的流水线!最终的预测模型是一个融合了 LassoLarsCV 和 GradientBoostingRegressor 两种算法的融合模型(Stacking model)。实话说,如果我自己动手训练,可能无法得到这样一个复杂的模型。

 

现在,激动人心的时刻到了,让我们来看看模型在测试集上的表现。我们可以使用.score来获得平均绝对误差:

 

 

 

 

这个项目我曾经自己手动花了几个小时完成,最终得到的Gradient Boosting Regressor 模型得到的平均绝对误差是9.06。机器学习自动化真的显著地提高了最终模型的表现,也大幅减少了开发时间。

 

总结一下

 

在这篇文章中,我们简要地介绍了使用云计算进行机器学习以及机器学习自动化。只要你有谷歌账号同时能联网,那么就可以使用Google Colab 进行开发,运行和分享机器学习工作文件。使用TPOT,可以通过自动化的训练和评估过程获得最优的机器学习流水线(包括特征预处理、模型选择、调参).另外,我们也意识到,机器学习自动化并不会替代数据科学家,反而它会让数据科学家能够抽出更多的时间花在更有价值的工作中。

 

作为一个新诞生的事物,TPOT已经相对成熟,而且非常易于使用。大家还不赶紧运用这个方法去尝试解决机器学习的问题(Kaggle上有很多不错的项目)!在Google Colab 的notebook上运行一个自动化的机器学习项目,简直未来感十足有木有,而且门槛居然如此之低,不说了,小编突然想在手机上跑下试试~

 

 

 

完美运行!

 

文中所提到的相关文件下载地址:

 

https://colab.research.google.com/drive/1CIVn-GoOyY3H2_Bv8z09mkNRokQ9jlJ-

 

https://github.com/WillKoehrsen/machine-learning-project-walkthrough/blob/master/auto_ml/tpot_exported_pipeline.py

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值