Исключение interecept в H2O (python и R) дает ненулевой коэффициент для перехвата в любом случае

1

Я пытаюсь использовать библиотеку H2O в Python и R для создания GLM без включенного перехвата. К сожалению, он, похоже, не работает. Результаты полностью отключены, коэффициент перехвата отличен от нуля (только стандартизованный коэффициент для перехвата равен нулю), однако это не дает мне правильного прогноза.

С перехватом, исключенным из модели, я ожидаю предсказание для случая, когда все остальные входы равны 0, также равны 0. Это не вариант. Коэффициент значительно компенсирует предсказание и фактически, если я устанавливаю intercept = True с симулированными данными, которые, как я знаю, не должны перехватывать, мой коэффициент перехвата намного ближе к 0, чем когда я запускаю те же данные с intercept = False.

То же самое происходит как в 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
sparkling-water

1 ответ

1
Лучший ответ

Увидев способ генерации данных, вы должны использовать standardize = F в h2o.glm, чтобы избежать проблем.

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

Это проблема с коэффициентом и стандартными коэффициентами. Обратите внимание, что наилучшие результаты, которые вы должны иметь с intercept = T и стандартизировать = T.

Вам следует избегать перехвата, когда вы должны предсказать значения 0 и только в нескольких случаях.

  • 1
    ах, конечно, большое спасибо! Мне не хватало чего-то очевидного

Ещё вопросы

Сообщество Overcoder
Наверх
Меню