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

Python与机器学习 徐 自远 395℃

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

优达学城Udacity 2019-09-02 22:14:57

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

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

 

免费GPU!平民玩家的机器学习春天来了http://t.zijieimg.com/PW1PfM/

转载请注明:徐自远的乱七八糟小站 » 免费GPU!平民玩家的机器学习春天来了

喜欢 (1)

苏ICP备18041234号-1 bei_an 苏公网安备 32021402001397号