h2o数字列转换为枚举 使用虹膜数据集中的缺失值创建数字列sepal_len 检查数据类型与实木复合地板以熊猫制成中的定义保持不变将pandas数据框更改为str列并另存为新的镶木文件:

问题描述

我有实木复合地板文件,其中包含数字列和分类列。

我想创建一个GBM模型,以后可以在Java程序中实现它的mojo进行推理。 问题在于,直到现在,我仍将数据中的null归为0(对于数字)和“ EMPTY”(对于分类列)。

当我在h2o中执行此操作时,我可以使用col_types参数在h2o import_file中强制执行我的方案。

当我不使用归因时,让h2o自己归因-它将我的数字列转换为枚举类型。

如果我尝试在不加归因的情况下在导入时强制执行类型,则对于所有数字功能都会收到以下错误

 error = 'Unsupported type override (String -> Numeric). Column XXX will be parsed as String'

因此连续特征将无法得到正确的处理...为什么将其转换为枚举? 我如何避免这种转换?

解决方法

H2O应该识别镶木地板文件的数据类型,并事先进行设置。保存实木复合地板文件时,您可能将数字列设置为字符串/分类。您有什么实木复合地板文件将列数据类型另存为?

我在H2O 3.30.0.1上验证,实木复合地板文件将其定义为何种数据类型将被识别。见下文。

使用虹膜数据集中的缺失值创建数字列(sepal_len

#Read a dataset
iris = h2o.import_file("http://h2o-public-test-data.s3.amazonaws.com/smalldata/iris/iris_wheader.csv")
#Convert one value to None
iris[0,0] = None
#Make it as pandas df and save as parquet as 
df = iris.as_data_frame()
df.to_parquet('iris.parquet')
df.dtypes

返回:

sepal_len    float64
sepal_wid    float64
petal_len    float64
petal_wid    float64
class         object
dtype: object

^列是浮点数

#Read in h2o
iris2 = h2o.import_file('iris.parquet')
iris2.head(2)

返回:

sepal_len   sepal_wid   petal_len   petal_wid   class
nan         3.5         1.4         0.2         Iris-setosa
4.9         3           1.4         0.2.        Iris-setosa

检查数据类型与实木复合地板(以熊猫制成)中的定义保持不变

iris2.types

返回:

{'sepal_len': 'real','sepal_wid': 'real','petal_len': 'real','petal_wid': 'real','class': 'enum'}

^ H2O帧数据类型是真实的(不是枚举)

将pandas数据框更改为str列并另存为新的镶木文件:

#Save the parquet as a string column
df.astype({'sepal_len':'str'}).to_parquet('irisB.parquet')
#Read file again
irisB = h2o.import_file('irisB.parquet')
irisB.types

返回:

{'sepal_len': 'enum','class': 'enum'}