h2o(和R)中用于训练和新测试样本的分类编码的一致性

时间:2017-11-27 14:58:29

标签: r h2o categorical-data

我无法理解是否需要与变量的分类/因子编码保持一致。一致性,我的意思是我需要确保整数和水平的编码在训练和新的测试样本中应该是相同的。

This answer似乎暗示没有必要。相反,this answer表明IT确实是必要的。

假设我有一个xcat的培训样本,可以取值abc。预期的结果是y变量在1xcat a 2xcat b 3 xcatch2o时,{1}}和as.factor

首先,我将创建数据框,将其传递给library(h2o) localH2O = h2o.init(ip = "localhost", port = 54321, startH2O = TRUE) n = 20 y <- sample(1:3, size = n, replace = T) xcat <- letters[y] xnum <- sample(1:10, size = n, replace = T) y <- dep + rnorm(0, 0.3, n = 20) df <- data.frame(xcat=xcat, xnum=xnum , y=y) df.hex <- as.h2o(df, destination_frame="df.hex") #Encode as factor. You will get: a=1, b=2, c=3 df.hex[ , "xcat"] = as.factor(df.hex[, "xcat"]) ,然后使用函数glm进行编码:

x = c("xcat", "xnum")
glm <- h2o.glm( y = c("y"), x = x, training_frame=df.hex, 
               family="gaussian", seed=1234)

glm.fit <- h2o.predict(object=glm, newdata=df.hex)

现在我用glm.fit模型估算它并预测相同的样本:

a

c给出了预期的结果(这里没有意外)。

现在,我将创建一个仅包含bxcat2 = c("c", "c", "a") xnum2 = c(2, 3, 1) y = c(1, 2, 1) #not really needed df.test = data.frame(xcat=xcat2, xnum=xnum2, y=y) df.test.hex <- as.h2o(df.test, destination_frame="df.test.hex") df.test.hex[ , "xcat"] = as.factor(df.test.hex[, "xcat"]) ,没有str(df.test.hex$xcat)值的新测试数据集:

2

运行c表示此次因素编码已将1分配给atest.fit = h2o.predict(object=glm, newdata=df.test.hex) test.fit #gives 2.8, 2.79, 1.21 as expected 分配给glm。看起来这可能是麻烦,但随后拟合按预期工作:

x

这里发生了什么? h2o模型是否携带R变量级别的信息,因此如果内部编码在训练和新测试数据中不同,那么它是不是在意?这是所有DropdownToggle模型的一般情况吗?

通过查看上面链接的答案之一,似乎至少有一些DropdownMenu模型确实需要一致性。

谢谢,最好!

0 个答案:

没有答案