Python と R の両方で H2O ライブラリを使用して、インターセプトを含まない GLM を生成しようとしています。残念ながら、機能していないようです。結果は完全にずれており、切片係数はゼロではありません (切片の標準化された係数のみがゼロです) が、これでは正しい予測が得られません。
モデルから切片を除外すると、他のすべての入力が 0 に等しい場合の予測も 0 になると予想されます。これはそうではありません。係数は予測を大幅に相殺しており、実際には、切片がないとわかっているシミュレートされたデータで切片 = True を設定すると、同じデータを切片 = 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)
ここで明らかな何かが欠けていますか?