将H2o中的分类特征(枚举)转换为布尔型

时间:2018-06-22 12:22:52

标签: python pandas enums boolean h2o

在我的Pandas数据框中,我有大量的布尔功能(True/False)。如果我bool,熊猫正确地将它们表示为df.dtypes。如果我将数据帧传递给h2o(h2o.H2OFrame(df)),则布尔特征表示为enum。因此,它们被解释为具有2个类别的类别特征。

是否可以将功能类型从enum更改为bool?在熊猫中,我可以使用df.astype('bool'),H2o中是否有等效物?

一个想法是在将True/False转换为H2o帧之前将1/0编码为其数字表示形式(df)。但是H2o现在将其识别为int64

在此先感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

枚举类型用于具有两个或多个类别的类别变量。因此它包括布尔值。即H2O中没有明确的bool类别,您无需在此处进行任何修复。

顺便说一句,如果您有很多布尔功能(因为您已手动完成一键编码),请不要这样做。取而代之的是给H2O原始的(多级分类)数据,它会在需要时在后台进行一次热编码。这样比较好,因为对于像决策树这样的算法而言,它们可以直接使用多级分类数据,因此效率更高。

请参见http://docs.h2o.ai/h2o/latest-stable/h2o-docs/data-science/algo-params/categorical_encoding.html,了解您可以尝试的一些替代方法。当生产中缺少该列时,添加缺少的类别。

(但是http://docs.h2o.ai/h2o/latest-stable/h2o-docs/data-science/deep-learning.html#faq处的“当您尝试在训练期间未看到的分类水平上进行预测时会发生什么?”似乎无法描述您所看到的行为?)

另请参阅http://docs.h2o.ai/h2o/latest-stable/h2o-docs/data-science/algo-params/use_all_factor_levels.html(如果您希望它是对还是错,我无法从该描述中得出答案,因此请尝试两种方式!)

更新:设置use_all_factor_levels = F,每个布尔输入将只有一个输入神经元(加上NA一个),而不是两个。如果您的分类输入几乎是所有布尔类型,建议您设置此类型。如果您的分类输入大部分具有很多水平,我不会(因为总的来说,它不会对输入神经元的数量产生太大影响,但是它可能会使网络更容易训练)。

为什么要丢失(NA)?

如果我输入的是布尔值,例如“ isBig”,将为它创建3个输入神经元。如果您查看varimp(),就会看到其中的名字:

isBig.1
isBig.0
isBig.missing(NA) 

想象一下,现在您将其投入生产,并且用户没有为isBig输入提供值(或给出NA,或给出非法值,例如“ 2”)。这是NA输入神经元被发射时的信号,表示我们不知道它是否很大。

说实话,我认为这与同时触发.0和.1神经元或不触发它们都没有什么用。但是,如果您使用的是use_all_factor_levels=F,那么 很有用。否则,所有NA数据都将被视为“不大”,而不是“可能是大或不大”。