首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么h2o包中的交叉验证数据存在不同的MSE?

为什么h2o包中的交叉验证数据存在不同的MSE?
EN

Stack Overflow用户
提问于 2018-11-30 06:19:57
回答 1查看 397关注 0票数 3

在摘要输出中,交叉验证数据的MSE为0.1641124,而在详细的交叉验证度量摘要中为0.14977892。它们不是相同的度量标准吗?

代码语言:javascript
复制
library(h2o)

h <- h2o.init()
data <- as.h2o(iris)
part <- h2o.splitFrame(data, 0.7, seed = 123)
train <- part[[1]]
test <- part[[2]]

m <- h2o.glm(x=2:5,y=1,train, nfolds = 10, seed = 123)
summary(m)


#...
#H2ORegressionMetrics: glm

#** Reported on cross-validation data. **
#** 10-fold cross-validation on training data (Metrics computed for combined 
#holdout predictions) **

#MSE:  ***0.1641124***
#RMSE:  0.4051079
#... 

#Cross-Validation Metrics Summary: 
#  mean  sd  cv_1_valid cv_2_valid cv_3_valid  cv_4_valid  cv_5_valid cv_6_valid  cv_7_valid cv_8_valid cv_9_valid


#...

#  mse  ***0.14977892*** 0.053578787  0.14102486 0.14244498 0.05266633  0.19028585 0.043878503 0.12635022  0.13820939 0.15831167 0.33359975
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-30 08:37:43

这两个MSE值计算不同。

第一个(0.1641124)是使用交叉验证期间对保持集的所有预测来计算的:

创建模型:

代码语言:javascript
复制
m <- h2o.glm(x = 2:5,
             y = 1,
             train,
             nfolds = 10,
             seed = 123,
             keep_cross_validation_predictions = TRUE,
             keep_cross_validation_fold_assignment = TRUE)

提取出预测

代码语言:javascript
复制
preds <- as.data.frame(h2o.cross_validation_holdout_predictions(m))

计算MSE:

代码语言:javascript
复制
mean((preds$predict - as.data.frame(train)$Sepal.Length)^2)
#output
0.1641125

较低的最小均方值(0.14977892)表示每个保持集的平均均方值:

代码语言:javascript
复制
folds <- as.data.frame(h2o.cross_validation_fold_assignment(m))

library(tidyverse)
data.frame(preds = preds$predict,  #create a data frame with hold out predictions
           folds = folds$fold_assignment,  #folds assignement
           true = as.data.frame(train)$Sepal.Length) %>% #true values
  group_by(folds) %>% #group by folds 
  summarise(mse = mean((preds - true)^2)) %>% # calculate mse for each fold
  ungroup() %>%
  summarise(mse = mean(mse)) %>% #average them
  as.numeric
#output
0.1497789

要复制第一次运行:

代码语言:javascript
复制
library(h2o)

h <- h2o.init()
data <- as.h2o(iris)
part <- h2o.splitFrame(data, 0.7, seed = 123)
train <- part[[1]]
test <- part[[2]]
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53552294

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档