glm() 与 weights_column 和 h2o.glm() 的权重

weights with glm() versus weights_column with h2o.glm()

我想确保 h2o.glm() 中的 weights_column 参数与 glm() 中的权重参数相同。为了进行比较,我正在使用 R 中的安全带数据集查看两个模型的 rmse。我认为这个模型不需要权重,但为了演示我添加了一个。

head(Seatbelts)

Seatbelts<-Seatbelts[complete.cases(Seatbelts),]

## 75% of the sample size
smp_size <- floor(0.75 * nrow(Seatbelts))

## set the seed to make your partition reproducible
set.seed(123)
train_ind <- sample(seq_len(nrow(Seatbelts)), size = smp_size)

train <- Seatbelts[train_ind, ]
test <- Seatbelts[-train_ind, ]

# glm()
m1 <- glm(DriversKilled  ~  front + rear + kms + PetrolPrice + VanKilled + law,
          family=poisson(link = "log"),
          weights = drivers,
          data=train)

pred <- predict(m1, test)
RMSE(pred = pred, obs = test$DriversKilled)

有效值为 120.5797。

# h2o.glm()
library(h2o)
h2o.init()

train <- as.h2o(train)
test <- as.h2o(test)
m2 <- h2o.glm(x = c("front", "rear", "kms", "PetrolPrice", "VanKilled", "law"),
                 y = "DriversKilled",
                 training_frame = train,
                 family = 'poisson',
                 link = 'log',
                 lambda = 0,
                 weights_column = "drivers")

# performance metrics on test data
h2o.performance(m2, test)

有效值为 18.65627。为什么这些模型有如此不同的 rmse?我在 h2o.glm() 中使用 weights_column 参数不正确吗?

对于 glm,您的预测是对数形式。要比较它们,您需要使用预测的指数。

Metrics::rmse(exp(pred), test$DriversKilled)
[1] 18.09796

如果您使用 h2o 进行预测,您会发现它已经处理了指数运算。

请注意,模型的 rmse 略有不同。 h2o.glm 后台还有很多事情要做。