我一直在与H2O.ai(3.10.3.6版)与R.h2o.glm不用于联合线性回归
我奋力用水复制从GLM结果匹配R中GLM。 GLM。我期望得到完全相同的结果(在这种情况下,以均方误差来评估),但我发现h2o的精度必须更差。由于我的模型是高斯的,我认为这两种情况都是普通最小二乘(或最大似然)回归。
这是我的例子:
train <- model.matrix(~., training_df)
test <- model.matrix(~., testing_df)
model1 <- glm(response ~., data=data.frame(train))
yhat1 <- predict(model1 , newdata=data.frame(test))
mse1 <- mean((testing_df$response - yhat1)^2) #5299.128
h2o_training <- as.h2o(train)[-1,]
h2o_testing <- as.h2o(test)[-1,]
model2 <- h2o.glm(x = 2:dim(h2o_training)[2], y = 1,
training_frame = h2o_training,
family = "gaussian", alpha = 0)
yhat2 <- h2o.predict(model2, h2o_testing)
yhat2 <- as.numeric(as.data.frame(yhat2)[,1])
mse2 <- mean((testing_df$response - yhat2)^2) #8791.334
的MSE是为H2O型号高出60%。我的假设glm≈h2o.glm错了吗?我将着眼于提供一个示例数据集asap(训练数据集是保密的,350000行x 350列)。
一个额外的问题:由于某些原因,as.h2o增加了一个充满NAs的额外行,以便h2o_training和h2o_testing有一个额外的行。在构建模型之前删除它(如我在这里所做的:as.h2o(train)[ - 1,])不会影响回归性能。没有传递给glm或h2o.glm的NA值;即训练矩阵不具有NA值。
从你自己的意见,而不知道h2o,似乎h2o处理NA的方式与glm完全不同。你应该在发布问题 – Akbar
@Akabar之前阅读两个帮助文件,训练矩阵中没有NAs,所以这不是问题。我已阅读文档和h2o.glm声明做“通过迭代重新最小二乘法进行最大似然估计”,这应该给高斯模型提供与ols相同的参数估计值。 – fifthace
如果您在h2o.glm中仔细设置参数,可以复制glm,但默认设置肯定会做不同的事情。 – jmuhlenkamp