排除H2O中的interecept(python和R)会产生截距的非零系数

2024-09-29 20:29:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试在Python和R中使用一个H2O库来生成一个不包含截获的GLM。不幸的是,它似乎不起作用。结果完全偏离,截距系数不为零(只有截距的标准化系数为零),然而,这并不能给我一个正确的预测。你知道吗

在模型中排除了截距的情况下,我希望所有其他输入都等于0的情况下的预测也为0。事实并非如此。这个系数非常显著地抵消了预测,实际上,如果我用我知道应该没有截距的模拟数据设置intercept=True,我的截距系数比用intercept=False运行相同数据时更接近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)

我是不是漏掉了什么明显的东西?你知道吗


Tags: 模型data情况framex1x2系数glm
1条回答
网友
1楼 · 发布于 2024-09-29 20:29:16

看到生成数据的方式,应该在h2o.glm中使用standarized=F来避免问题。你知道吗

http://docs.h2o.ai/h2o/latest-stable/h2o-docs/data-science/glm.html

这是一个系数和标准化系数的问题。请注意,intercept=T和standarize=T应该是最好的结果

当必须预测0值时,应该避免截获,而且只在少数情况下。你知道吗

相关问题 更多 >

    热门问题