2017-07-10 5 views
2

Comment puis-je enregistrer un modèle h2o formé avec le package mlr et le charger dans une nouvelle session pour prédire la variable cible pour un nouvel ensemble de données? Dans l'exemple suivant, je l'ai essayé avec save et h2o.saveModel, mais il génère une erreur.Comment enregistrer un modèle h2o en utilisant mlr dans R?

library(mlr) 
a <- data.frame(y=factor(c(1,1,1,1,1,1,1,1,0,0,1,0)), 
       x1=rep(c("a","b", "c"), times=c(6,3,3))) 
aTask <- makeClassifTask(data = a, target = "y", positive="1") 
h2oLearner <- makeLearner("classif.h2o.deeplearning") 
model <- train(h2oLearner, aTask) 
# save mlr and h2o model separately: 
save(file="saveh2omodel.rdata", list=c("model")) 
h2o.saveModel(getLearnerModel(model), path="h2o_model") 

# shutdown h2o and close R and open new session 
h2o.shutdown() 

library(mlr) 
library(h2o) 
h2o.init() 
h2o.loadModel("h2o_model") 
load(file="saveh2omodel.rdata") 
#ERROR: Unexpected HTTP Status code: 412 Precondition Failed (url = http://localhost:54321/99/Models.bin/) 
# Error in .h2o.doSafeREST(h2oRestApiVersion = h2oRestApiVersion, urlSuffix = page, :        
# ERROR MESSAGE: 
# Illegal argument: dir of function: importModel: h2o_model 

b <- data.frame(x1=rep(c("a","b", "c"), times=c(3,5,4))) 
pred <- predict(model, newdata=b) 
# only works if h2o wasn't shut down! 

Répondre

5

Vous utilisez de manière incorrecte h2o.loadModel (rien à voir avec mlr). Voir l'exemple d'utilisation dans l'aide h2o - h2o.saveModel renvoie le chemin complet que vous devez donner à h2o.loadModel. Exemple de travail complet:

library(mlr) 
library(h2o) 
a <- data.frame(y=factor(c(1,1,1,1,1,1,1,1,0,0,1,0)), 
       x1=rep(c("a","b", "c"), times=c(6,3,3))) 
aTask <- makeClassifTask(data = a, target = "y", positive="1") 
h2oLearner <- makeLearner("classif.h2o.deeplearning") 
model <- train(h2oLearner, aTask) 
# save mlr and h2o model separately: 
save(file="saveh2omodel.rdata", list=c("model")) 
savedModel = h2o.saveModel(getLearnerModel(model), path="h2o_model") 

# shutdown h2o and close R and open new session 
h2o.shutdown() 

library(mlr) 
library(h2o) 
h2o.init() 
h2o.loadModel(savedModel) 
load(file="saveh2omodel.rdata") 
b <- data.frame(x1=rep(c("a","b", "c"), times=c(3,5,4))) 
pred <- predict(model, newdata=b)