排除 H2O 中的截距(python 和 R)无论如何都会产生非零截距系数
Excluding interecept in H2O (python and R) produces non-zero coefficient for intercept anyway
我正在尝试在 Python 和 R 中使用 H2O 库来生成不包含截距的 GLM。不幸的是,它似乎没有用。结果完全不对,截距系数不为零(只有标准截距系数为零),但是,这并没有给我正确的预测。
从模型中排除截距后,我希望对所有其他输入等于 0 的情况的预测也为 0。不是这种情况。该系数非常显着地抵消了预测,实际上,如果我使用我知道应该没有截距的模拟数据设置 intercept=True,我的截距系数比我 运行 具有 intercept= 的相同数据时更接近 0错误。
同样的情况出现在 R 和 Python 中,我不确定我在设置模型时是否做错了什么。
我编写的代码示例只是为了测试 R 中的问题:
library(h2o)
h2o.init()
x1 = runif(500)
x2 = runif(500)
x3 = runif(500)
y = 2.67*x1 + 1.23*x2 -7.2*x3
h2odata<-data.frame(x1,x2,x3,y)
head(h2odata)
h2odata <- as.h2o(h2odata)
predictors <- c('x1','x2','x3')
response <- 'y'
h2o.splits = h2o.splitFrame(data=h2odata,ratios=.8)
train <- h2o.splits[[1]]
valid <- h2o.splits[[2]]
glm <- h2o.glm(x=predictors,y=response,family='gaussian',link='identity',
intercept = FALSE,training_frame = train,
validation_frame = valid)
glm
x1=0
x2=0
x3=0
newdata = data.frame(x1,x2,x3)
colnames(newdata)<-c('x1','x2','x3')
newdata<-as.h2o(newdata)
h2o::h2o.predict(glm,newdata)
我是不是漏掉了什么明显的东西?
看到你生成数据的方式,你应该在 h2o.glm 中使用 standardize = F 来避免你的问题。
http://docs.h2o.ai/h2o/latest-stable/h2o-docs/data-science/glm.html
这是系数和标准化系数的问题。请注意,最好的结果应该是 intercept = T 和 standardize = T.
当您必须预测 0 值并且仅在少数情况下,您应该避免拦截。
我正在尝试在 Python 和 R 中使用 H2O 库来生成不包含截距的 GLM。不幸的是,它似乎没有用。结果完全不对,截距系数不为零(只有标准截距系数为零),但是,这并没有给我正确的预测。
从模型中排除截距后,我希望对所有其他输入等于 0 的情况的预测也为 0。不是这种情况。该系数非常显着地抵消了预测,实际上,如果我使用我知道应该没有截距的模拟数据设置 intercept=True,我的截距系数比我 运行 具有 intercept= 的相同数据时更接近 0错误。
同样的情况出现在 R 和 Python 中,我不确定我在设置模型时是否做错了什么。
我编写的代码示例只是为了测试 R 中的问题:
library(h2o)
h2o.init()
x1 = runif(500)
x2 = runif(500)
x3 = runif(500)
y = 2.67*x1 + 1.23*x2 -7.2*x3
h2odata<-data.frame(x1,x2,x3,y)
head(h2odata)
h2odata <- as.h2o(h2odata)
predictors <- c('x1','x2','x3')
response <- 'y'
h2o.splits = h2o.splitFrame(data=h2odata,ratios=.8)
train <- h2o.splits[[1]]
valid <- h2o.splits[[2]]
glm <- h2o.glm(x=predictors,y=response,family='gaussian',link='identity',
intercept = FALSE,training_frame = train,
validation_frame = valid)
glm
x1=0
x2=0
x3=0
newdata = data.frame(x1,x2,x3)
colnames(newdata)<-c('x1','x2','x3')
newdata<-as.h2o(newdata)
h2o::h2o.predict(glm,newdata)
我是不是漏掉了什么明显的东西?
看到你生成数据的方式,你应该在 h2o.glm 中使用 standardize = F 来避免你的问题。
http://docs.h2o.ai/h2o/latest-stable/h2o-docs/data-science/glm.html
这是系数和标准化系数的问题。请注意,最好的结果应该是 intercept = T 和 standardize = T.
当您必须预测 0 值并且仅在少数情况下,您应该避免拦截。