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
后台还有很多事情要做。
我想确保 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
后台还有很多事情要做。