zl程序教程

您现在的位置是:首页 >  其它

当前栏目

【H2O系列】H2O概述

系列 概述
2023-09-27 14:29:25 时间

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
img

  • 推荐:kuan 的首页,持续学习,不断总结,共同进步,活到老学到老
  • 导航
    • 檀越剑指大厂系列:全面总结 java 核心技术点,如集合,jvm,并发编程 redis,kafka,Spring,微服务,Netty 等
    • 常用开发工具系列:罗列常用的开发工具,如 IDEA,Mac,Alfred,electerm,Git,typora,apifox 等
    • 数据库系列:详细总结了常用数据库 mysql 技术点,以及工作中遇到的 mysql 问题等
    • 懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作
    • 数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂

非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

一、下载并安装

1.h2o 介绍

H2O 概述:开源,分布式内存机器学习平台

为了社会和经济稳定,让每个人都可以使用 AI 非常重要

H2O 的核心代码是用 Java 编写的,它的 REST API 允许从外部程序或脚本访问 H2O 的所有功能。该平台包括用于 R,Python,Scala,Java,JSON 和 CoffeeScript / JavaScript 的接口,以及内置的 Web 界面 Flow

最新的版本叫做H2O-3 是 H2O 的第三个化身,并与 Hadoop 和 Spark 等大数据技术无缝协作。 H2O 可以通过更快,更好的预测建模,轻松快速地从数据中获取洞察力。

在这里插入图片描述

一个简单方便的建模工具,提供多种接入方式.java ,python 等客户端.还有一个 h2o-flow 的可视化界面

cluster是一组一起工作的 H2O 节点; 将作业提交到群集时,群集中的所有节点都会处理作业的一部分。

h2o 包括很多产品,h2o flow 是其中一款便利的机器学习,深度学习的工具,在 web UI 上操作即可,不用编写代码就能轻松实现数据的挖掘(当然这也是它的弊端,不写代码肯定功能会受到一定的限制啦)。

对于 flow 的意思就是流的意思,其实 h2o flow 的核心思想就是分成若干个 cell(细胞),然后 cell 按照先后顺序进行 flow。

2.架构图

这里写图片描述

这里写图片描述

3.gitee 地址

https://gitee.com/mirrors/h2o-dev

4.部署 demo

https://h2o-release.s3.amazonaws.com/h2o/rel-zipf/7/index.html

5.Windows 启动

cd /h2o-dev
gradlew.bat build -x test //拉取前端代码
java -jar build/h2o.jar

6.访问链接

http://localhost:54321/

二、web UI 页面介绍

1.cell 介绍

img

2.help 介绍使用

我们还可以在这里找到官方提供成操作案例是非常详细的(在 web 的右侧)

img

就会来到这个页面,发现提供了几乎我们用得上的算法实践

img

点击这个来到导入数据的页面(我们也可以看到我们进行数据挖掘的流程刚好是导入数据,建立模型,预测。发现文档顺序也是这样是),我们可以看到

img

人家给我们说了,实践用到的数据基本上都可以在这个网站上进行下载,个别不是,这不影响,因为对应的 example 会提供

img

3.操作按钮

img

img

img

img

4.支持的文件

image-20210910145516523

5.总结

  • 使用界面如下,类似于 zeppelin 的使用风格.
  • java -jar h2o.jar [各种参数] ,内置了 jetty 服务,直接用 java -jar 就可以启动.然后访问端口为 54321.
  • flow 的方式不能对数据做处理,需要将数据提前处理好.
  • 对中文的支持不是很好.显示乱码.主要是中文是双字节的,h2o 有自己的数据结构(hex).hex 是对单字节的处理.修改下源码即可.
  • h2o 可以直接读取 hdfs (hdfs://…),本地等数据.对于文件格式的支持有 text,csv,parquet 等.orc 的格式需要以 hadoop 集群的方式启动,才能使用.
  • 对 parquet 格式的支持有 timestamp int96 的问题.这个问题主要是 parquet 项目中 timestamp 使用的类型是 int96 造成的.spark,drill 等项目也会遇到这个问题.但是都各自解决掉了.参照 spark 的修改方式.也可以修改.
  • h2o 集群的部署,有三种部署方式,一种是 jvm 进程组建 standalone 集群.另外两种借助 hadoop 实现分布式集群.
  • standalone 集群方式中,没有 HA,其中一台坏掉了这个集群就坏掉了.
  • standalone 集群也会有通信问题,在不使用多长时间后这个集群会因为监听心态通信不成功而 down 掉.(这个问题没有解决),可能是 ipv6 的问题.
  • 使用方式很简单,按照 notebook 的方式引用数据,选择模型类型.很快就能看到各个模型的指标了.
  • h2o 中文社区我是没有找到.整个社区也不是很活跃.

三、实践一下模型

1.导入数据

导入数据很简单,我们可以点击:

img

img

img

img

2.格式转换

将数据转变成统一的格式(.hex)

img

img

img

3.数据切分

(这一步有就切分,没有就不用啦,因为有的时候数据是需要我们切分成 train 和 test,有的时候本来就停供了两个文件,当然我们就不用切分了)

img

img

img

4.训练模型

img

img

img

img

img

5.预测模型

img

img

img

h2o flow 对每一种算法都停供了不同的数据图表,这里演示我用的 gbm,所以图不是没那么多。

四、补充

1.超参数

h2o flow 给我们提供了便利的使用超参数,只需要想建立模型的时候勾选上既可以,比如:

img

然后进行勾选

img

我们进行添加几个数据作为超参数

img

于是我们建立模型后就多出来几个模型,这就是不同的超参数对应的模型

img

我们在建立模型的参数上看到超参数

img

2.查看集群状态

img

因为我是单机模式,所以只有一个

img

3.关闭服务

img

4.列出所有模型

img

img

五.源码理解

1.处理请求

CoreServletProvider
private static final List<ServletMeta> SERVLETS = Collections.unmodifiableList(Arrays.asList(
    new ServletMeta("/3/NodePersistentStorage.bin/*", NpsBinServlet.class),
    new ServletMeta("/3/PostFile.bin", PostFileServlet.class),
    new ServletMeta("/3/PostFile", PostFileServlet.class),
    new ServletMeta("/3/DownloadDataset", DatasetServlet.class),
    new ServletMeta("/3/DownloadDataset.bin", DatasetServlet.class),
    new ServletMeta("/3/PutKey.bin", PutKeyServlet.class),
    new ServletMeta("/3/PutKey", PutKeyServlet.class),
    new ServletMeta("/", RequestServer.class)
  ));

2.源码解读

这里写图片描述

六.分布式部署

部署方式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tUPVj1qm-1637328322130)(C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20210908105746844.png)]

  • xgb xgboost 部署
  • k8s
  • hadoop
  • docker
  • EC2 aws 服务器部署
  • Dockerfile.dev

觉得有用的话点个赞 👍🏻 呗。

❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

img