【问题标题】:h2o numeric columns are converted to enumh2o 数值列被转换为枚举
【发布时间】:2020-09-27 14:15:37
【问题描述】:

我有一个由数字和分类列组成的镶木地板文件。

我想创建一个 GBM 模型,以后我可以在 java 程序中实现它的 mojo 进行推理。 问题是,直到现在我将数据中的空值归为数字的 0 和分类列的“空”。

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

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

如果我尝试在没有我估算的情况下强制导入类型,我会收到所有数字特征的以下错误:

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

所以连续特征不会得到正确的处理......为什么它被转换为枚举? 我怎样才能避免这种转换?

【问题讨论】:

    标签: python h2o


    【解决方案1】:

    H2O 应该识别 parquet 文件的数据类型并预先设置它们。保存镶木地板文件时,您可能会将数字列设置为字符串/分类。你有什么 parquet 文件将列数据类型保存为?

    我在 H2O 3.30.0.1 上验证了数据类型将被 parquet 文件定义的内容识别。见下文。

    使用 iris 数据集中的缺失值创建数字列 (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
    

    检查数据类型与 parquet 的定义保持一致(用 pandas 制作)

    iris2.types
    

    返回:

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

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

    将 pandas 数据框更改为 str 列并保存为新的 parquet 文件:

    #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',
     'sepal_wid': 'real',
     'petal_len': 'real',
     'petal_wid': 'real',
     'class': 'enum'}
    

    【讨论】:

      猜你喜欢
      • 2018-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-07
      • 1970-01-01
      • 1970-01-01
      • 2010-10-11
      相关资源
      最近更新 更多