簡體   English   中英

排除 H2O 中的截距(python 和 R)無論如何都會產生截距的非零系數

[英]Excluding interecept in H2O (python and R) produces non-zero coefficient for intercept anyway

我正在嘗試在 Python 和 R 中使用 H2O 庫來生成不包含攔截的 GLM。 不幸的是,它似乎不起作用。 結果完全關閉,截距系數非零(只有截距的標准化系數為零),但是,這並沒有給我一個正確的預測。

由於從模型中排除了截距,我希望所有其他輸入都等於 0 的情況的預測也為 0。 不是這種情況。 該系數相當顯着地抵消了預測,實際上,如果我使用我知道應該沒有截距的模擬數據設置截距=真,我的截距系數比使用截距=假運行相同數據時更接近於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

這是系數和標准化系數的問題。 請注意,截距 = T 和標准化 = T 時應獲得的最佳結果。

當您必須預測 0 值且僅在少數情況下時,您應該避免攔截。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM