来这里找志同道合的小伙伴!

引 言

相信大家在日常的建模工作中都会或多或少地思考一个问题:建模可不可以被自动化?今天将围绕这个问题向大家介绍一个开源的自动建模工具H2O。本文将会cover以下三个部分:

1、H2O工具是什么;

2、基于H2O自动建模的具体流程与实战代码展示;

3、关于自动建模的一些思考。

希望本文能够帮助到大家,当你们没有足够的算法工程师但又想利用大数据建模提升企业效率的时候,使用自动建模工具也许是一个不错的选择。

H2O简介

H2O.ai是初创公司Oxdata于2014年推出的一个独立开源机器学习平台,它的主要服务对象是数据科学家和数据工程师,主要功能就是为App提供快速的机器学习引擎。目前它在全世界服务超过18,000家企业,服务用户数超过20万。根据H2O官网的介绍,它的主要优点包括:

  • 支持大量的无监督式和监督式机器学习算法

  • 支持通过R与Python进行引入包的方式进行模型的开发

  • 能够提供给用户一个类似于jupyter notebook的UI界面进行“托拉拽”式的模型开发

  • 支持模型的快速部署(用户可以在训练后下载基于Java的POJO和MOJO文件)

  • 支持自动化建模和自动化参数调优

H2O实战练习

大家可以使用在Python或R中引入H2O包的形式进行该工具的使用,也可以下载软件在UI界面进行托拉拽的操作。

一、基于H2O Python包的机器学习实现

首先,一起来看看在Python环境中看看如何使用这个工具进行建模(目前支持Python版本为2.7/3.5/3.6)。

1、下载安装包

首先在安装包之前先进行依赖包的安装,最后下载并安装H2O的whl文件,如下(使用H2O之前请读者务必在服务器或本地安装Java):

安装完毕后进入Python环境(这里使用的是Jupyter Lab的交互环境,类似Jupyter Notebook)。

2、引入包并查看环境

引入H2O的包后可以查看到目前集群的状态,如下

现在可以看到集群的内存、cores、Python版本等信息;另外H2O.ls()命令类似于Linux中的ls命令,它可以提供目前读取到内存的数据集以及训练好的模型Object有哪些,由于还没有引入数据、也没有训练任何模型,因此没有任何objects。

3、引入、查看、整理数据集 

下面通过H2O引入并查看一个用来训练的数据集,该数据集为电商场景的二分类数据,特征包括一些用户RFM、浏览、加购等信息,y为用户是否会在之后7天内下单购物。

在进行导入数据后,发现user_id(这里叫pin)依然在数据集中,进行列删除操作。

同时,由于要训练的是二分类(classification)模型,所以需要将y(这里为buy_tag)的类型从int改为enum枚举值,这样在模型的训练过程中会默认选择AUC作为评价指标。

4、导入模型module并建立模型object

这里选择GBM这个基于树的算法进行模型的开发,并设置100个树,最大深度设置为10,并设置10折交叉验证。

5、训练模型并展示训练结果

这里train()的参数非常多,找一些重点来举例; x为特征的名字集合,y为label,training_frame为训练集。

当然用户也可以通过将数据集分为训练集、测试集的方式来获取out-of-sample AUC等指标,这里通过交叉验证来获取该指标。训练完毕后可以进行效果展示。

可以看到在模型结果中H2O自动帮用户计算了大部分评价指标,在这个二分类任务中重点看AUC,可以发现在cross-validation数据集上的AUC为0.824,效果还不错,同时结果中默认给出了能够是F1 score达到最大的阈值(在这里为0.316)以及相应的混淆矩阵。

由于不同模型涉及到不同参数,具体模型参数设定可见H2O的官方文档

http://h2o-release.s3.amazonaws.com/h2o/rel-xu/4/docs-website/h2o-py/docs/modeling.html

目前H2O支持的监督模型包括:

  • H2ODeepLearningEstimator(深度神经网络)

  • H2OGradientBoostingEstimator(梯度提升树)

  • H2OGeneralizedLinearEstimator(线性回归)

  • H2ONaiveBayesEstimator(朴素贝叶斯)

  • H2ORandomForestEstimator(随机森林)

  • H2OStackedEnsembleEstimator(组合模型)

据官网介绍,之后H2O还会引入目前常用的tensorflow等组件来支持不同深度学习算法的使用,所以大家敬请期待。

6、H2O自动建模

在上节展示单模型建立的流程后,来看一下H2O最强大的功能,AutoML,自动建模。

如果在尝试自动建模的时候,请尽量设置max_models或者max_runtime_secs这样的参数来设置要训练的模型个数上线或最长训练时间,因为自动建模的底层会尝试对用户所选择的模型的参数进行GridSearch(网格搜索),以此来进行模型超参的调优。若没有设置好模型个数上线或最长训练时间,可能会出现跑了很久依然没有结束的情况。

同时可以看到一旦开始了自动建模,H2O很友好地提供了一个进度条来帮助查看建模进度。

训练完成后查看模型基于训练集AUC的排名,如下图:

这个排名版展示了所有所训练的100个模型中AUC前10高的模型,在图中可以清晰地看到最优的模型为组合模型(StackedEnsemble_AllModels),AUC为0.825。前10名中还包括像XGBoost和GBM一样的基于树的模型,AUC也相当不错。

值得一提的是,组合模型中AllModels与BestOfFamily的区别在于:前者是将所有训练好的模型作为base model进行融合,后者是通过各个模型family中最好的那个模型作为base model进行融合(融合方式默认为GLM线性回归)。

然后查看自动建模得到的最优模型在测试集上的效果,发现out-of-sample AUC依然高达0.820,说明没有明显的过拟合,自动建模完成!

7、H2O模型部署

在训练完模型之后,最后一步便是模型的部署,可能大家在平日操作中对于这一步比较苦恼,因为若使用sklearn这样的经典机器学习包在训练完模型后,模型本身是不支持在Hive集群进行分布式打分的。当需要打分的数据集过大的时候,没有办法一次性将其读入内存并进行打分,因此只能通过batch读取的方式按批次来进行预测打分,这样一来就需要用户花时间来写一些Python或者bash的脚本。

但是H2O提供了一个非常好的模型部署流程,它一方面支持用户像sklearn那样将一个模型文件下载到本地,又支持用户进行POJO或者MOJO文件的下载。而这里所说的POJO和MOJO文件分别是Plain Ordinary Java Object和Maven plain Old Java Object,作用是优化开发人员的模型部署流程,并且支持在Hive上进行模型打分UDF的改写。一旦通过POJO或者MOJO实现了模型打分UDF函数的编写,模型的打分在集群上就是分布式的,速度会非常快。

而且,在尝试了batch打分和分布式打分的两个流程之后,发现若对3000万行的数据进行非分布式的batch打分,总共用时25分钟,而分布式的打分则总共用时不到1分钟,效率提升很多。

由于具体的改写流程较细,因此大家若对这部分内容感兴趣,可以在H2O的官网和他们的github中找到相关的现成代码,助力模型部署。

http://h2o-release.s3.amazonaws.com/h2o/rel-xu/4/docs-website/h2o-py/docs/h2o.html?highlight=pojo#h2o.download_pojo

二、可视化建模UI工具

除了在Python或者R通过代码实现建模以外,H2O还提供了一个很用户友好的UI界面来实现“托拉拽式建模”,下图为这个工具的(H2O Flow)主界面:

这个工具相当于一个图形界面,底层依然是刚刚上面介绍的那些代码,它的好处是可以帮助企业中对于Python或者R语言不太熟悉的业务人员进行快速模型的建立。

由于篇幅问题,这里主要讲一下它每个功能点的具体含义,详细操作大家可以参照官网的用户手册进行学习。值得一提的是,这个图形界面非常的用户友好,当时仅用了1-2个小时就熟悉了基本操作,相信大家一定也能很快的学会使用。功能解释:

  • importFiles(读取数据集)

  • importSqlTables(读取SQL表)

  • getFrames(查看已经读取的数据集)

  • SplitFrame(将一个数据集分成多份数据集)

  • mergeFrame(将两个数据集进行列组合或行组合)

  • getModels(查看所有训练好的模型)

  • getGrids(查看网格搜索的结果)

  • getPredicitons(查看模型预测结果)

  • getJobs(查看目前模型训练的任务)

  • runAutoML(自动建模)

  • buildModel(手动建立模型)

  • importModel(从本地读取模型)

  • predict(使用模型进行预测)

关于自动建模的一些思考

读到这里,大家除了对H2O有了一些基本了解之外,也一定同样思考着一个更宏大的问题,那就是如何看待自动建模与机器学习的未来。想必大家一定在许多媒体报道或者公众号中读过类似这样的文章:“AI时代来了,最容易消失的100种职位”。对于从事商业分析、数据分析、数据挖掘、数据工程、算法工程的用户,可能多少也想过这样的自动建模技术能在多大程度上代替现有的一些日常工作。它会完全取代现有的建模过程么?还是说它目前效果不好,无需担心?

其实,看待“手动建模”和“自动建模”这两者的关系可以参考“有人驾驶车”和“无人驾驶车”这两者的关系。就算短期内无人驾驶车可以上路,交通部门也一定会要求驾驶人员具有一定的驾驶技术,以确保在无人驾驶发生意外之时能够让用户进行手动操作。同理,在如今各大公司都开始慢慢探索自动建模技术的时候,依然需要拥有求知欲和一颗敬畏之心,在尝试自动建模技术之前深入了解一些模型算法本身的技术,这样一来,虽然可以更多地在工作中使用自动建模,但是一旦出了问题,也可以从“自动”切换为“手动”来迅速地解决模型部署上的问题,而不至于干着急。

另一方面,目前自动建模领域所涉及的领域更多的还是浅层学习,还没有发展到可以自动建立CNN或者RNN那样的地步,毕竟后者还是一个新兴的前沿领域,许多算法工程师依然在图像识别、语音识别、阅读理解领域不断创新探索新的算法。这方面的工作暂时不太会被自动建模技术所取代(H2O官网上有写到未来可能会集成tensorflow的建模框架,但目前来看暂时还没有开源的资源)。

那么,如果自动建模技术在5年内真的渗透到我们工作中的各个领域后,基础的数据挖掘和算法工程师该如何体现自己的价值呢?起码有这两点:

  • 对于业务的深度理解:虽然模型可以进行自动训练,但是前期与业务方的建模需求整合,特征工程,变量清洗等工作还是需要人来参与,因为业务知识是暂时没有办法教给机器的。

  • 对于模型应用场景的选择:如何去应用模型以及选择最优的应用场景也是需要人来判别的,机器本身是没有正负情感的。

如果大家对于自动建模有新的想法,欢迎随时联系,一起交流进步!

后 记

京东数科运营决策团队基于大数据环境,结合丰富的业务场景,利用机器学习专业技术,不断挖掘海量数据中蕴含的丰富信息,我们已将一系列机器学习模型应用到多个领域中,并且坚持在算法深度的道路上持续探索,致力于对未知信息和事件做出更精准预测,使业务运营策略更加精准有效。

RECOMMEND

推荐阅读

京东JDK的探索与研究 (一)

京东风格的移动端Vue组件库NutUI2.0来啦

京东PLUS会员项目 前端性能优化实践

Taro UI 2.0 发布:新增自定义主题功能,适配更多小程序

好文,请点个好看

禅道开源版用户手册_自动化建模 | H2O开源工具介绍相关推荐

  1. 禅道开源版用户手册_禅道集成 - ZDOO基础版使用手册 - ZDOO - 全面支持阿米巴的全协同管理软件...

    ZDOO2.7版本开始增加了禅道集成功能(需要配合禅道基础版7.4以上或企业版5.0以上版本,禅道亦不需要额外安装插件). 集成禅道后可以使用ZDOO账户去登录禅道,将禅道作为ZDOO的一个应用,在Z ...

  2. 自动化建模 | H2O开源工具介绍

    点击「京东数科技术说」可快速关注 「引言」相信很多读者在日常的建模工作中都会或多或少地思考一个问题:建模可不可以被自动化?今天笔者围绕这个问题向大家介绍一个开源的自动建模工具H2O.本文将会cover ...

  3. 禅道开源版用户手册_Docker搭建开源版禅道以及项目基本流程介绍

    对于自学软件测试的同学来说,经常会遇到这样的困惑: 测试用例怎么写? 有啥好的模板? 缺陷提交的模板是什么样的? bug的生命周期是啥? 项目的流程是啥? 以上这些困惑,在你仔细看完这篇文章后,都能找 ...

  4. 禅道 mysql 远程连接_远程访问禅道开源版数据库(基于docker)

    软件测试 远程访问禅道开源版数据库(基于docker) navicat访问基于docker搭建的禅道的数据库,报错"2003 can't connect to MySQL server on ...

  5. 禅道设置bug模板_一款热度很高的项目管理和bug工具,免费使用,可在公司推广哦...

    以前在公司会用到各种bug管理工具,但使用最顺手的感觉还是禅道,主要是它除了能满足我的日常工作之外,用户体验上也做的不错 .前段时间领导碰巧看到了工具,觉得使用它管理项目应该不错,打算在全公司推广,让 ...

  6. 禅道设置bug模板_禅道的自定义功能:表格切换和创建页面的自定义

    原标题:禅道的自定义功能:表格切换和创建页面的自定义 禅道8.2beta版本开始,增强了自定义功能. 用户可以根据自己的使用需要个性化设置禅道页面所显示的功能模块和字段. 可自定义的项如下: 导航菜单 ...

  7. 禅道设置bug模板_禅道项目管理软件bug过滤剧本

    新公司运用禅道作bug治理体系.每次产物上线的时刻,一切的测试职员测试出bug之就就提在禅道上. 由于我们公司现在的测试只要一个,就把许多产物拉来充数.他们分不清bug和需求.所以每每涌现的状况是一大 ...

  8. 禅道项目管理软件,敏捷开发团队不可或缺的工具

    很多软件企业随着业务发展,出现了诸多研发问题,如产品交付延期,研发加班,产品故障率高,测试压力大,客户满意度低.这些问题更多是提升研发效能不得当所致.软件研发是一个复杂的系统工程,效能提高也就需要系统 ...

  9. 开源虚拟示波器-_一个新的开源数据库,TP-Link路由器上的开源固件以及更多新闻

    开源虚拟示波器- 在本周的开源新闻摘要中,我们介绍了Attic Labs的新开源数据库,TP-Link路由器上的开源固件等. 2016年7月31日至8月6日的开源新闻摘要 Attic Labs宣布新的 ...

最新文章

  1. 一次win10体验旅程
  2. 删除表中存在多条相同记录的方法
  3. 【转】SQL存储结构(页)
  4. 026_JavaScript数组排序
  5. 【职场】看一位前端工程师如何上班摸鱼
  6. 测试站点写入文件权限代码下载
  7. iis7.0 https访问显示403访问被拒绝_提高网站访问性能——Tomcat优化
  8. 论文浅尝 | 动态词嵌入
  9. Unity 基础知识参考
  10. 2021年基于B/S的高校学生选课管理系统
  11. 获取Linux服务器公网和内网IP地址
  12. 【JAVA SE基础篇】24.包的机制和import详解
  13. 《菜根谭》 明·洪应明
  14. 整理了46个python人工智能库,详细介绍(含资源),建议收藏
  15. 嵌入式开发专业术语概念汇总
  16. 关于迅雷播放器的模仿
  17. C语言 统计含有中文的字符串中的字数、 字符数和行数
  18. 萌新的linux之旅16
  19. 【matlab】求空间两个向量之间的夹角
  20. 战略收缩,贝壳剑指何方?

热门文章

  1. 剑指offer 用2个栈实现队列
  2. Spark创建DataFrame的三种方法
  3. 深度学习笔记4:深度神经网络的正则化
  4. nginx和pcre错误问题
  5. 《C++游戏编程入门(第4版)》——1.11 问题讨论
  6. RedHat AS4 配置Yum
  7. CSS_DIV学习记录2(用背景颜色实现一个网页的完整布局)
  8. Dictionary帮助类
  9. 2/2 数据获取:网络数据的获取
  10. 2/100. Hamming Distance