2016-05-04 44 views
6

Poszukuje efektywnego sposobu drukowania drzew w rstudio, przepływu H2O lub lokalnej strony html z modeli RF i GBM h2o podobnych do tego na obrazie w linku poniżej. W szczególności, w jaki sposób można wykreślić drzewa dla obiektów (modeli dopasowanych) rf1 i gbm2 produkowanych przez poniższy kod, być może przez analizowanie h2o.download_pojo (rf1) lub h2o.download_pojo (gbm1)?R: Odcinki drzew od h2o.randomForest() i h2o.gbm()

http://i.stack.imgur.com/3OWx1.png

# # The following two commands remove any previously installed H2O packages for R. 
# if ("package:h2o" %in% search()) { detach("package:h2o", unload=TRUE) } 
# if ("h2o" %in% rownames(installed.packages())) { remove.packages("h2o") } 

# # Next, we download packages that H2O depends on. 
# pkgs <- c("methods","statmod","stats","graphics","RCurl","jsonlite","tools","utils") 
# for (pkg in pkgs) { 
# if (! (pkg %in% rownames(installed.packages()))) { install.packages(pkg) } 
# } 
# 
# # Now we download, install h2o package 
# install.packages("h2o", type="source", repos=(c("http://h2o-release.s3.amazonaws.com/h2o/rel-turchin/3/R"))) 
library(h2o) 

h2o.init(nthreads = -1, max_mem_size = "2G") 
h2o.removeAll() ##clean slate - just in case the cluster was already running 

## Load data - available to download from link below 
## https://www.dropbox.com/s/gu8e2o0mzlozbu4/SampleData.csv?dl=0 
df <- h2o.importFile(path = normalizePath("../SampleData.csv")) 

splits <- h2o.splitFrame(df, c(0.4, 0.3), seed = 1234) 

train <- h2o.assign(splits[[1]], "train.hex") 
valid <- h2o.assign(splits[[2]], "valid.hex") 
test <- h2o.assign(splits[[2]], "test.hex") 

predictor_col_start_pos <- 2 
predictor_col_end_pos <- 169 
predicted_col_pos <- 1 

rf1 <- h2o.randomForest(training_frame = train, validation_frame = valid, 
         x = predictor_col_start_pos:predictor_col_end_pos, y = predicted_col_pos, 
         model_id = "rf_covType_v1", ntrees = 2000, stopping_rounds = 10, score_each_iteration = T, 
         seed = 2001) 

gbm1 <- h2o.gbm(training_frame = train, validation_frame = valid, x = predictor_col_start_pos:predictor_col_end_pos, 
      y = predicted_col_pos, model_id = "gbm_covType2", seed = 2002, ntrees = 20, 
      learn_rate = 0.2, max_depth = 10, stopping_rounds = 2, stopping_tolerance = 0.01, 
      score_each_iteration = T) 


## Next step would be to plot trees for fitted models rf1 and gbm2 
# print the model, POJO (Plain Old Java Object) to screen 
h2o.download_pojo(rf1) 
h2o.download_pojo(gbm1) 
+0

Powtarzalne przykład został dostarczony. – Webby

+0

Dziękujemy za dodanie odtwarzalnego przykładu. Możemy teraz przenieść to do [SO]. Jeśli trochę poczekasz, niedługo powinien się tam dostać. – gung

+0

Dziękuję @gung. – Webby

Odpowiedz

4

myślę, że może to być rozwiązanie szukasz;

library(h2o) 
h2o.init() 
df = h2o.importFile("http://s3.amazonaws.com/h2o-public-test-data/smalldata/airlines/allyears2k_headers.zip") 
model = h2o.gbm(model_id = "model", 
      training_frame = df, 
      x = c("Year", "Month", "DayofMonth", "DayOfWeek", "UniqueCarrier"), 
      y = "IsDepDelayed", 
      max_depth = 3, 
      ntrees = 5) 
h2o.download_mojo(model, getwd(), FALSE) 

Teraz pobrać najnowszą stabilną wersję h2o z http://www.h2o.ai/download/ i uruchomić narzędzie PrintMojo z wiersza poleceń.

java -cp h2o.jar hex.genmodel.tools.PrintMojo --tree 0 -i model.zip -o model.gv 
dot -Tpng model.gv -o model.png 

otwarty model.png

Więcej informacji: http://docs.h2o.ai/h2o/latest-stable/h2o-genmodel/javadoc/index.html