将pandas数据帧有效转换为h2o帧

aya*_*aan 7 python machine-learning h2o

我有一个Pandas数据框,它有Encoding: latin-1和被分隔;.数据帧几乎非常大size: 350000 x 3800.我想最初使用sklearn,但我的数据帧缺少值(NAN values)所以我不能使用sklearn的随机森林或GBM.所以我不得不使用H2O's分布式随机森林来训练数据集.主要问题是当我这样做时,数据帧没有被有效地转换h2o.H2OFrame(data).我检查了提供编码选项的可能性,但文档中没有任何内容.

有人对此有所了解吗?任何线索都可以帮助我.我还想知道是否有其他像H2O这样的库可以非常有效地处理NAN值?我知道我们可以归因于列,但我不应该在我的数据集中这样做,因为我的列是来自不同传感器的值,如果值不存在则意味着传感器不存在.我只能使用Python

Ana*_*C U 18

import h2o
import pandas as pd

df = pd.DataFrame({'col1': [1,1,2], 'col2': ['César Chávez Day', 'César Chávez Day', 'César Chávez Day']})
hf = h2o.H2OFrame(df)
Run Code Online (Sandbox Code Playgroud)

由于您遇到的问题是由于数据集中的NAN数量很多,因此应首先处理此问题.有两种方法可以做到这一点.

  1. 替换NAN为单个,明显超出范围的值.防爆.如果某个功能在0-1之间变化NAN,则将该功能替换为-1.

  2. 使用Imputer类来处理NAN值.这将取代NAN该特征的均值,中值或模式.


kar*_*rap 5

如果您的数据中有大量缺失值并且您想提高转换效率,我建议明确指定列类型和NA字符串,而不是让 H2O 对其进行解释。您可以将要解释为NAs的字符串列表和指定列类型的字典传递给H2OFrame()方法。

它还允许您为不存在的传感器创建自定义标签,而不是具有通用的“不可用”(在 Pandas 中使用自定义字符串估算 NaN 值)。

import h2o    

col_dtypes = {'col1_name':col1_type, 'col2_name':col2_type}
na_list = ['NA', 'none', 'nan', 'etc']

hf = h2o.H2OFrame(df, column_types=col_dtypes, na_strings=na_list)
Run Code Online (Sandbox Code Playgroud)

有关更多信息 - http://docs.h2o.ai/h2o/latest-stable/h2o-py/docs/_modules/h2o/frame.html#H2OFrame

编辑:@ErinLeDell 建议h2o.import_file()直接使用指定列 dtypes 和 NA 字符串将为您提供最大的加速。