今天详细研究一下h2o flow
的操作流程,分析其中的关键步骤及界面要素,为后续改造做准备。
首先
h2o flow
有点类似于jupyter
,是一个文本和代码混合的编辑器,这个思想目前在我们系统中应该不会去考虑!

导入文件(Import Files)
h2o
貌似支持导入多种文件格式,比如.gz
、.zip
、.csv
、.txt
等等,也可以直接导入一个文件目录。
我测试的时候,是直接使用.gz
文件,里面其实是一个mnist
的csv
文件。
系统在导入一个文件之后,会为这个文件生成另外一个后缀为.hex
的文件,后续解析文件以及建模都依赖于此。
解析文件(Parse File)
前面的导入文件只是第一步,而这一步解析文件很关键,一般情况下,h2o很智能,它知道怎么去解析文件,但是它也提供了解析文件的各种参数,方便用户选择。

下面描述一下这些参数:
-
ID:就是之前说的,系统会为导入的文件起一个后缀为
.hex
的名字,这个名字在这里可以修改。 -
Parser:这个解析器,我的理解就是对应h2o支持的几种文件格式
- AUTO:由h2o来自动解析
- ARFF
- XLS
- XLSX
- CSV
- SVMLight
- ORC
- AVRO
- PARQUET
-
Separator:应该指的就是文件内列分隔的标识,一般像
csv
文件都是以,
分隔的。下面截几个图示意一下,h2o里支持的分隔符非常多。
2018-05-07-16-04-31.jpg
2018-05-07-16-05-34.jpg
-
Column Headers:列头的解析规则,有的文件会在第一行标明列名信息,以有则不会,所以需要设置一下。h2o提供了参数选择,根据实际情况选择即可。
-
Options:其它一些参数配置,
Enable single quotes as a field quotation character
表示启用单引号表示引用字符。Delete on done
应该是指解析完之后就删除导入数据,h2o建议是选中这个的。 -
EDIT COLUMN NAMES AND TYPES:这个是非常重要的设置,需要告诉解析器文件中每一列的
列名
以及列的数据类型
。同样一般情况下,如果没有列名的话,h2o会自增设置,数据类型h2o也会自动判断,但是自动判断不见得都是正确的,最后用户还是需要检查一下,并将一些重要的列设置正确。比如对于分类问题,样本的标签值一般都是数字,但是用户需要在这里将其设置为枚举
,即Enum
。
h2o
在解析文件时,会出来如下一个界面,显示解析的进度:

在
h2o
中,基本每一个操作都会被当成一个Job
。
点击View
之后:

可以看到数据集的详情,并且用户可以将标签列设置为枚举,当标签列设置为枚举之后,h2o会出现针对分类标签的统计图表:

上图中的inspect
中文含义是“检查”,可以理解为数据可视化,用户可以配置不同的参数,以查看到该标签列的数据分页图表。



impute
有点像是纠错
的意思,用户可以修改某一列具体取值的计算规则:

Column-C785+Method-Mean+Group By C1 C2,我个人理解,意思就是"把C785这一列的值,修改为依据C1和C2,取它们的平均值(Mean)"。
Method
有三种取值:Mean(平均值),Median(中值),Mode(取模)
构建模型(Build Model)
第一步:选择模型算法


由于我现在做的是mnist
示例,所以我选择Deep Learning
,当选择了深度学习算法之后,会发现界面增加了大量的参数配置:





下面按照官方说明,给出一些重要的参数说明:

上图主要是设置训练数据集
以及测试数据集
,还有最终的分类列,即上图中的response_column
。

-
activation:设置激活函数
-
hidden:设置隐藏层的维度及神经元个数,这里的
128,64
,就表示设置了两个隐藏层,第一层有128
个神经元,第二层有64
个神经元 -
epochs:这个应该都能理解,就是训练的
轮数
-
variable_importance:变量重要性,这个我不懂,不乱说

-
adaptive_rate:自适应学习率,如果要手动设置的话,需要取消选中状态
-
input_dropout_ratio:这是一个防止过拟合的参数,这是设置输入层的比率,因为输入层只有一个,所以这里设置一个就行了
-
hidden_dropout_ratios:同上,这是设置隐藏层的比率,因为我们刚才设置了隐藏层是两个,所以这里以逗号分隔
-
l1与l2:这也是防止过拟合的参数,具体我不懂


这四个参数是设置early stop
的参数,具体含义我不了解

这些参数是设置随机因子
、学习率
、衰变率
、动量因子
等,具体看解释吧。
正式构建模型
点击Build Model
:


点击上图中的超链接:

可以看到h2o
为模型提供了大量的可视化数据展示,以及功能按钮。上图展示了对一个模型可以进行的操作:
-
Refresh:刷新
-
Predict:预测
-
Download POJO:这个应该是下载模型对象,具体下载下来,会发现是一个
Java文件
,文件有3M
多,大概10万
多行。 -
Download Model Deployment Package(MOJO):一个压缩包,我也不知道是什么东东。
-
Export:将模型导出到指定路径下。
-
Inspect:具体不知道。

-
Delete:删除模型
-
Download Gen Model:一个可执行的jar包。
下面仔细看看具体的模型结果展示信息:
第一个是模型参数信息,即前面在构建模型前,所设置的自定义参数:

下面这个不知道是什么意思,好像是把损失
取了一下对数进行图表展示,但不知道具体有什么含义。

下面这个是变量重要性
,意思应该就是针对所有的特征列,它能计算出哪些对结果的影响更重要,会对这些特征做一个重要性排序。

这应该就是一个训练的混淆矩阵
,行是真实分类,列是预测分类,就是结果的展示,每个分类的错误率有多少。

这也是一个验证的混淆矩阵
,行是真实分类,列是预测分类,就是结果的展示,每个分类的错误率有多少。

还有很多的模型结果展示,这里就不列举了。
今天有一个问题一直没有搞明白,无论我怎么修改参数,最终训练的轮数跟我设置的
epoch
都不一样,而且小非常多,不知道为什么。
网友评论