我无法理解是否需要与变量的分类/因子编码保持一致。一致性,我的意思是我需要确保整数和水平的编码在训练和新的测试样本中应该是相同的。
This answer似乎暗示没有必要。相反,this answer表明IT确实是必要的。
假设我有一个xcat
的培训样本,可以取值a
,b
,c
。预期的结果是y
变量在1
为xcat
a
2
时xcat
b
3
xcat
当c
为h2o
时,{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
给出了预期的结果(这里没有意外)。
现在,我将创建一个仅包含b
和xcat2 = 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
分配给a
,test.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
模型确实需要一致性。
谢谢,最好!