掌握H2O全家桶,颠覆你的数据科学之路
图源:Pexels网站 Pixabay博主
在上个月结束的旧金山Kaggle活动日中,Kaggle主办方按照惯例为参加者们组织了一场编程马拉松。其中,H2O.ai的首席机器学习科学家艾琳·莉黛尔(Erin LeDell)发布的一条推特让人们印象深刻。
图片来源:推特
H2O平台能轻松并直观地解决机器学习的诸多问题。此次编程马拉松排行榜中,H2O AutoML团队也表现不俗,赫然在列。本指南旨在帮助新手了解并使用H2O。
H2O.ai: H2O背后的公司
H2O.ai 总部位于加利福尼亚州山景城,运营着一系列机器学习平台。H2O的核心优势在于其紧密集成的高性能机器学习组件。在今年1月份Gartner公布的数据科学平台魔力象限分析中,H2O处于“有远见”象限。
图片来源: Gartner (2019年1月)
接下来简要介绍一下H2O.ai旗下产品:
H2O.ai 产品与解决方案
H2O
H2O 是一个开源的分布式内存机器学习平台,具有线性可扩展性。它支持最常用的统计及机器学习算法,同时内置自动机器学习功能。H2O的核心代码用Java编写,其REST API(应用程序编程接口创建方式)允许从外部程序或脚本访问H2O的所有功能。平台上有用于R、Python、Scala、Java、JSON和CoffeeScript / JavaScript的接口,以及内置网页端界面Flow。
H2O Sparkling Water
Sparkling Water帮助用户将快速、可扩展的H2O机器学习算法与Spark功能相结合。如果用户需管理大型集群以满足数据处理需求,并想在Spark和H2O平台互相传输数据,该工具将十分有用。
H2O4GPU
H2O4GPU 是一个开源的GPU加速机器学习包,包含Python和R两种编程接口,任何用户都可利用GPU构建高级机器学习模型。
H2O Driverless AI
Driverless AI的用户界面
H2O Driverless AI 是H2O.ai旗下自动机器学习的旗舰产品。它可以完全自动化地完成应用数据科学领域一些最具挑战性且最高效的任务,包括特征工程、模型校正、模型集成和模型部署等。借助H2O Driverless AI,专业的数据科学家只需点击图形用户界面即可训练并部署建模管道。目前,Driverless AI产品已获得商业许可,拥有21天免费试用版。
什么是H2O
H2O-3是H2O的最新版本。H2O提供如R、Python、Scala、Java、JSON等常用界面以及Flow笔记本端口/网页界面,并且能与Hadoop和Spark等大数据技术无缝协作。通过更快更好的预测建模,H2O可迅速且轻易地洞察数据。
高级体系架构
H2O支持多源数据导入,具备快速、可扩展及分布式的Java计算引擎。以下是H2O高级体系架构的概述。
H2O的高级体系架构
支持算法
H2O 支持多种常用机器学习算法。
H2O支持的算法
安装
H2O提供可以从CRAN安装的R包版本和可以从PyPI安装的python包版本。本文将只进行Python安装演示。
准备工具
· Python工具包
· 构建H2O及运行H2O测试需使用64位JDK。使用命令行、R或Python包运行H2O二进制文件也只需64位JRE。
依赖项:
pip install requests pip install tabulate pip install "colorama>=0.3.8" pip install future
· pip 安装
pip install -f http://h2o-release.s3.amazonaws.com/h2o/latest_stable_Py.html h2o
· conda
conda install -c h2oai h2o=3.22.1.2
提示:从OS X El Capitan中用pip 安装H2O时, 用户必须包含--user 标志. 例如:
pip install -f http://h2o-release.s3.amazonaws.com/h2o/latest_stable_Py.html h2o --user
安装测试
所有python新会话开始时都要创建python客户端与H2O集群的连接。集群指一组协作的H2O节点,作业上传至集群时,集群内所有节点都会处理一部分作业。
为检查安装是否就位,打开Jupyter笔记本程序,输入如下代码:
import h2o h2o.init()
接下来会出现一个本地H2O集群。执行单元格时,屏幕中将以表格形式显示节点数、总内存、Python版本等相关信息。如需报告错误,请确认是否输入上述全部信息。注意,执行h2o.init()时需确保之前的H2O实例没有运行。
执行h2o.init()(使用Python语言)
默认情况下,H2O实例将占用所有内核和约25%的系统内存。但若想为其分配一块固定内存,可以在init函数中指定。比如说,想使用4GB内存,那么只需2个内核,函数如下所示。
#Allocate resources h2o.init(nthreads=2,max_mem_size=4)
如此设置之后,H2O实例将仅使用2个内核、4GB内存。此处还是使用默认方式。
Importing Data with H2O in Python导入H2O
安装成功后即可开始处理真实的数据集。此处将对有名的葡萄酒数据集进行回归分析。任务目的是通过输入给定的一组特征,以从0到10的等级预测白葡萄酒质量。
数据
下面是葡萄牙清酒(Vinho Verde)系列中白葡萄酒的相关数据。
数据导入
从本地CSV文件导入数据。此命令与pandas.read_csv 相似,之后数据将以H2OFrame(http://docs.h2o.ai/h2o/latest-stable/h2o-py/docs/frame.html)框架形式储存在内存中。
wine_data = h2o.import_file("winequality-white.csv") wine_data.head(5)# The default head() command displays the first 10 rows.
调出数据集的前五条数据
电子设计自动化(EDA)
研究数据集以获取更多信息。
wine_data.describe()
调出数据集的几列
此时全部由数字来描述特性,且没有任何分类变量。接下来分析各个特性之间的关系。
import matplotlib.pyplot as plt import seaborn as sns plt.figure(figsize=(10,10)) corr = wine_data.cor().as_data_frame() corr.index = wine_data.columns sns.heatmap(corr, annot = True, cmap='RdYlGn', vmin=-1, vmax=1) plt.title("Correlation Heatmap", fontsize=16) plt.show()
使用H2O建模
搭建回归模型以预测葡萄酒质量。H2O模块包含多种分类与回归问题的算法。
将数据拆分为测试集和训练集
鉴于只有一个数据集,要先将其分为测试集和训练集,以便评估模型预测结果。此处使用split_frame() 函数进行拆分。
wine_split = wine_data.split_frame(ratios = [0.8], seed = 1234) wine_train = wine_split[0] # using 80% for trainingwine_test = wine_split[1] #rest 20% for testing print(wine_train.shape, wine_test.shape) (3932, 12) (966, 12)
定义预测变量
predictors = list(wine_data.columns) predictors.remove('quality') # Since we need to predict quality predictors
广义线性模型
使用默认设置构建广义线性模型。广义线性模型(GLM)预测结果按照指数分布的回归模型。分布方式除高斯(正态)分布外,还包括泊松分布、二项分布和伽马分布。
# Import the function for GLMfrom h2o.estimators.glm import H2OGeneralizedLinearEstimator # Set up GLM for regressionglm = H2OGeneralizedLinearEstimator(family = 'gaussian', model_id = 'glm_default') # Use .train() to build the modelglm.train(x = predictors, y = 'quality', training_frame = wine_train) print(glm)
GLM model’s parameters on the Training set
完成后,通过测试数据集检查模型性能。
glm.model_performance(wine_test)
进行预测
使用广义线性模型对测试数据集进行预测。
predictions = glm.predict(wine_test) predictions.head(5)
也可以使用一些其他的监控算法,如分布式随机森林、梯度增强机器甚至深度学习等算法,另外还可自行调整超参数。
H2OAutoML:自动机器学习
自动机器学习(AutoML)指把应用机器学习解决现实问题的整个流程自动化。可以说,AutoML从真正意义上实现了机器学习,即使是没有相关专业知识的人也能上手。H2OAutoML通常会自动化模型的训练和调整部分。
H2O AutoML: Available Algos
现在使用H2O的AutoML功能解决预测葡萄酒质量的回归问题。
导入自动机器学习(AutoML)模块
from h2o.automl import H2OAutoMLaml = H2OAutoML(max_models = 20, max_runtime_secs=100, seed = 1)
此处AutoML将运行20个基本模型,持续100秒。默认运行时间为1小时。
训练
aml.train(x=predictors, y='quality', training_frame=wine_train, validation_frame=wine_test)
排行榜
下面是自动机器学习排行榜。
print(aml.leaderboard)
自动机器学习(AutoML)排行榜
排行榜显示的是由AutoML构建的排名前10的模型及其参数。排名第一的模型由Stacked Ensemble建立。模型以aml.leader形式储存。
单个模型的贡献
然后,查看单个模型的贡献。
metalearner = h2o.get_model(aml.leader.metalearner()['name']) metalearner.std_coef_plot()
其中,XRT( 极端随机树) 贡献最大,其次是分布式随机森林。
预测
preds = aml.leader.predict(wine_test)
上述代码仅为最简单的入门,想要了解有关H2O AutoML的更多知识,请点击AutoML(print(aml.leaderboard))查阅进阶指南(有R和Python语言两种版本)。
关闭
h2o.shutdown()
使用Flow — H2O’的网页用户界面
最后,简单介绍一下H2O的开源网页用户界面Flow。Flow是基于网页端口的交互式计算环境,能让用户把代码执行、文本、算数、绘图和富媒体整合到单一文件中,这和Jupyter笔记本中的操作很类似。
启动FLow
H2O一旦启动并运行,只需将浏览器转到 http://localhost:54321 即可进入Flow的用户界面。
启动H2O flow
Flow界面
下图是Flow界面的简要介绍。点
H2O flow的界面
Flow旨在帮助数据科学家快速轻松地创建模型、导入文件、拆分数据帧、并完成在其他环境中通常需要大量操作的任务。
运行
现在重新在Flow上演示葡萄酒数据分析。
留言 点赞 关注
我们一起分享AI学习与发展的干货
欢迎关注全平台AI垂类自媒体 “读芯术”