library(randomForestExplainer)
library(randomForest)
library(tidyverse)

explain_forest Explain a random forest

Explains a random forest in a html document using plots created by randomForestExplainer

#install.packages("randomForestExplainer")
forest <- randomForest::randomForest(Species ~ ., data = iris, localImp = TRUE)
#explain
suppressPackageStartupMessages(suppressMessages(suppressWarnings(explain_forest(forest, interactions = TRUE))))

  |                                                                       
  |                                                                 |   0%
  |                                                                       
  |...                                                              |   5%
   inline R code fragments


  |                                                                       
  |......                                                           |  10%
label: setup (with options) 
List of 1
 $ include: logi FALSE


  |                                                                       
  |..........                                                       |  15%
  ordinary text without R code


  |                                                                       
  |.............                                                    |  20%
label: unnamed-chunk-3

  |                                                                       
  |................                                                 |  25%
  ordinary text without R code


  |                                                                       
  |....................                                             |  30%
label: unnamed-chunk-4

  |                                                                       
  |.......................                                          |  35%
  ordinary text without R code


  |                                                                       
  |..........................                                       |  40%
label: unnamed-chunk-5

  |                                                                       
  |.............................                                    |  45%
  ordinary text without R code


  |                                                                       
  |................................                                 |  50%
label: unnamed-chunk-6

  |                                                                       
  |....................................                             |  55%
  ordinary text without R code


  |                                                                       
  |.......................................                          |  60%
label: unnamed-chunk-7

  |                                                                       
  |..........................................                       |  65%
   inline R code fragments

[1] accuracy_decrease and gini_decrease

  |                                                                       
  |..............................................                   |  70%
label: unnamed-chunk-8

  |                                                                       
  |.................................................                |  75%
   inline R code fragments

[1] mean_min_depth, accuracy_decrease, gini_decrease, no_of_nodes, times_a_root

  |                                                                       
  |....................................................             |  80%
label: unnamed-chunk-9 (with options) 
List of 2
 $ fig.width : num 10
 $ fig.height: num 9


  |                                                                       
  |.......................................................          |  85%
  ordinary text without R code


  |                                                                       
  |..........................................................       |  90%
label: unnamed-chunk-10 (with options) 
List of 2
 $ fig.width : num 10
 $ fig.height: num 9


  |                                                                       
  |..............................................................   |  95%
  ordinary text without R code


  |                                                                       
  |.................................................................| 100%
label: conditional_print (with options) 
List of 2
 $ child: chr "Explain_forest_template_interactions.Rmd"
 $ eval : symbol interactions


  |                                                                       
  |                                                                 |   0%
  |                                                                       
  |.........                                                        |  14%
   inline R code fragments

[1] Petal.Length, Petal.Width, Sepal.Length, Sepal.Width

  |                                                                       
  |...................                                              |  29%
label: unnamed-chunk-11

  |                                                                       
  |............................                                     |  43%
  ordinary text without R code


  |                                                                       
  |.....................................                            |  57%
label: unnamed-chunk-12

  |                                                                       
  |..............................................                   |  71%
   inline R code fragments


  |                                                                       
  |........................................................         |  86%
label: unnamed-chunk-13

  |                                                                       
  |.................................................................| 100%
  ordinary text without R code



/Applications/RStudio.app/Contents/MacOS/pandoc/pandoc +RTS -K512m -RTS Explain_forest_template.utf8.md --to html --from markdown+autolink_bare_uris+ascii_identifiers+tex_math_single_backslash --output /Users/nanaakwasiabayieboateng/Documents/memphisclassesbooks/DataMiningscience/Your_forest_explained.html --smart --email-obfuscation none --self-contained --standalone --section-divs --table-of-contents --toc-depth 3 --variable toc_float=1 --variable toc_selectors=h1,h2,h3 --variable toc_collapsed=1 --variable toc_smooth_scroll=1 --variable toc_print=1 --template /Library/Frameworks/R.framework/Versions/3.4/Resources/library/rmarkdown/rmd/h/default.html --no-highlight --variable highlightjs=1 --variable 'theme:bootstrap' --include-in-header /var/folders/mj/w1gxzjcd0qx2cw_0690z7y640000gn/T//Rtmp9LrmXm/rmarkdown-str351f599a15d3.html --mathjax --variable 'mathjax-url:https://mathjax.rstudio.com/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML' 
#suppressWarnings()

important_variables Extract k most important variables in a random forest

Get the names of k variables with highest sum of rankings based on the specified importance mea- sures

important_variables(measure_importance(forest), k = 3)
[1] "Petal.Length" "Petal.Width"  "Sepal.Length"

measure_importance

Importance of variables in a random forest

  measure_importance(forest, mean_sample = "top_trees", measures = NULL)

mean_sample has value “all_trees”, “top_trees”, “relevant_trees”

measure_importance(forest)

min_depth_distribution

Calculate minimal depth distribution of a random forest

min_depth_distribution(forest)%>%head()

min_depth_interactions

Calculate mean conditional minimal depth with respect to a vector of variables

  min_depth_interactions(forest,
  vars = important_variables(measure_importance(forest)),
  mean_sample = "top_trees", uncond_mean_sample = mean_sample)
forest <- randomForest::randomForest(Species ~ ., data = iris, ntree = 100)
min_depth_interactions(forest, c("Petal.Width", "Petal.Length"))%>%head()

plot_importance_ggpairs

Plot importance measures with ggpairs Plot selected measures of importance of variables in a forest using ggpairs

  plot_importance_ggpairs(importance_frame,
  measures = names(importance_frame)[c(2, 4, 5, 3, 7)],
  main = "Relations between measures of importance")
forest <- randomForest::randomForest(Species ~ ., data = iris, localImp = TRUE, ntree = 200) 
frame <- measure_importance(forest, measures = c("mean_min_depth", "times_a_root"))
plot_importance_ggpairs(frame, measures = c("mean_min_depth", "times_a_root"))

plot_importance_rankings

Plot importance measures rankings with ggpairs Description Plot against each other rankings of variables according to various measures of importance

plot_importance_rankings(importance_frame,
  measures = names(importance_frame)[c(2, 4, 5, 3, 7)],
  main = "Relations between rankings according to different measures")
  
  
forest <- randomForest::randomForest(Species ~ ., data = iris, localImp = TRUE, ntree = 300) 
frame <- measure_importance(forest, measures = c("mean_min_depth", "times_a_root"))
plot_importance_ggpairs(frame, measures = c("mean_min_depth", "times_a_root"))

plot_min_depth_distribution

Plot the distribution of minimal depth in a random forest Description Plot the distribution of minimal depth in a random forest

    plot_min_depth_distribution(min_depth_frame, k = 10, min_no_of_trees = 0,
     mean_sample = "top_trees", mean_scale = FALSE, mean_round = 2,
    main = "Distribution of minimal depth and its mean") 
    
    
 forest <- randomForest::randomForest(Species ~ ., data = iris, ntree = 300)
    plot_min_depth_distribution(min_depth_distribution(forest))

plot_min_depth_interactions

Plot the top mean conditional minimal depth

plot_min_depth_interactions(interactions_frame, k = 30,
  main = paste0("Mean minimal depth for ", paste0(k,
  " most frequent interactions"))) 
  
  
forest <- randomForest::randomForest(Species ~ ., data = iris, ntree = 100)
plot_min_depth_interactions(min_depth_interactions(forest, c("Petal.Width", "Petal.Length")))

plot_multi_way_importance

Multi-way importance plot

Plot two or three measures of importance of variables in a random fores. Choose importance mea- sures from the colnames(importance_frame).

forest <- randomForest::randomForest(Species ~ ., data = iris, localImp = TRUE)
plot_multi_way_importance(measure_importance(forest))

plot_predict_interaction

Plot the prediction of the forest for a grid of values of two numerical variables

Plot the prediction of the forest for a grid of values of two numerical variables

    forest <- randomForest::randomForest(Species ~., data = iris)
    plot_predict_interaction(forest, iris, "Petal.Width", "Sepal.Width")

NA
LS0tCnRpdGxlOiAicmFuZG9tRm9yZXN0ICBFeHBsYWluZXIKIgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKYXV0aG9yOiBOYW5hIEJvYXRlbmcKZGZfcHJpbnQ6IHBhZ2VkClRpbWU6ICdgciBTeXMudGltZSgpYCcKZGF0ZTogImByIGZvcm1hdChTeXMudGltZSgpLCAnJUIgJWQsICVZJylgIgotLS0KCiAKYGBge3IsbWVzc2FnZT1GQUxTRSx3YXJuaW5nPUZBTFNFfQpsaWJyYXJ5KHJhbmRvbUZvcmVzdEV4cGxhaW5lcikKbGlicmFyeShyYW5kb21Gb3Jlc3QpCmxpYnJhcnkodGlkeXZlcnNlKQpgYGAKIAogCiMjIyMgIGV4cGxhaW5fZm9yZXN0IEV4cGxhaW4gYSByYW5kb20gZm9yZXN0CgpFeHBsYWlucyBhIHJhbmRvbSBmb3Jlc3QgaW4gYSBodG1sIGRvY3VtZW50IHVzaW5nIHBsb3RzIGNyZWF0ZWQgYnkgcmFuZG9tRm9yZXN0RXhwbGFpbmVyCgpgYGB7cixtZXNzYWdlPUZBTFNFLHdhcm5pbmc9RkFMU0V9CiNpbnN0YWxsLnBhY2thZ2VzKCJyYW5kb21Gb3Jlc3RFeHBsYWluZXIiKQoKCgpmb3Jlc3QgPC0gcmFuZG9tRm9yZXN0OjpyYW5kb21Gb3Jlc3QoU3BlY2llcyB+IC4sIGRhdGEgPSBpcmlzLCBsb2NhbEltcCA9IFRSVUUpCgoKCiNleHBsYWluCgoKc3VwcHJlc3NQYWNrYWdlU3RhcnR1cE1lc3NhZ2VzKHN1cHByZXNzTWVzc2FnZXMoc3VwcHJlc3NXYXJuaW5ncyhleHBsYWluX2ZvcmVzdChmb3Jlc3QsIGludGVyYWN0aW9ucyA9IFRSVUUpKSkpCgojc3VwcHJlc3NXYXJuaW5ncygpCgpgYGAKCgoKIyMjIyBpbXBvcnRhbnRfdmFyaWFibGVzIEV4dHJhY3QgayBtb3N0IGltcG9ydGFudCB2YXJpYWJsZXMgaW4gYSByYW5kb20gZm9yZXN0CgpHZXQgdGhlIG5hbWVzIG9mIGsgdmFyaWFibGVzIHdpdGggaGlnaGVzdCBzdW0gb2YgcmFua2luZ3MgYmFzZWQgb24gdGhlIHNwZWNpZmllZCBpbXBvcnRhbmNlIG1lYS0gc3VyZXMKCgpgYGB7cn0KaW1wb3J0YW50X3ZhcmlhYmxlcyhtZWFzdXJlX2ltcG9ydGFuY2UoZm9yZXN0KSwgayA9IDMpCmBgYAoKCiMjIyMgbWVhc3VyZV9pbXBvcnRhbmNlIAoKSW1wb3J0YW5jZSBvZiB2YXJpYWJsZXMgaW4gYSByYW5kb20gZm9yZXN0CgoKICAgICAgbWVhc3VyZV9pbXBvcnRhbmNlKGZvcmVzdCwgbWVhbl9zYW1wbGUgPSAidG9wX3RyZWVzIiwgbWVhc3VyZXMgPSBOVUxMKQoKbWVhbl9zYW1wbGUgaGFzIHZhbHVlICJhbGxfdHJlZXMiLCAidG9wX3RyZWVzIiwgInJlbGV2YW50X3RyZWVzIgoKYGBge3J9Cm1lYXN1cmVfaW1wb3J0YW5jZShmb3Jlc3QpCmBgYAoKCgojIyMjIG1pbl9kZXB0aF9kaXN0cmlidXRpb24KCkNhbGN1bGF0ZSBtaW5pbWFsIGRlcHRoIGRpc3RyaWJ1dGlvbiBvZiBhIHJhbmRvbSBmb3Jlc3QKCmBgYHtyfQptaW5fZGVwdGhfZGlzdHJpYnV0aW9uKGZvcmVzdCklPiVoZWFkKCkKYGBgCgoKCiMjIyMgbWluX2RlcHRoX2ludGVyYWN0aW9ucwoKQ2FsY3VsYXRlIG1lYW4gY29uZGl0aW9uYWwgbWluaW1hbCBkZXB0aCB3aXRoIHJlc3BlY3QgdG8gYSB2ZWN0b3Igb2YgdmFyaWFibGVzCgoKICAgICAgbWluX2RlcHRoX2ludGVyYWN0aW9ucyhmb3Jlc3QsCiAgICAgIHZhcnMgPSBpbXBvcnRhbnRfdmFyaWFibGVzKG1lYXN1cmVfaW1wb3J0YW5jZShmb3Jlc3QpKSwKICAgICAgbWVhbl9zYW1wbGUgPSAidG9wX3RyZWVzIiwgdW5jb25kX21lYW5fc2FtcGxlID0gbWVhbl9zYW1wbGUpCgoKYGBge3J9CgoKZm9yZXN0IDwtIHJhbmRvbUZvcmVzdDo6cmFuZG9tRm9yZXN0KFNwZWNpZXMgfiAuLCBkYXRhID0gaXJpcywgbnRyZWUgPSAxMDApCm1pbl9kZXB0aF9pbnRlcmFjdGlvbnMoZm9yZXN0LCBjKCJQZXRhbC5XaWR0aCIsICJQZXRhbC5MZW5ndGgiKSklPiVoZWFkKCkKCmBgYAoKCgojIyMjIHBsb3RfaW1wb3J0YW5jZV9nZ3BhaXJzCgpQbG90IGltcG9ydGFuY2UgbWVhc3VyZXMgd2l0aCBnZ3BhaXJzClBsb3Qgc2VsZWN0ZWQgbWVhc3VyZXMgb2YgaW1wb3J0YW5jZSBvZiB2YXJpYWJsZXMgaW4gYSBmb3Jlc3QgdXNpbmcgZ2dwYWlycwoKICAgICAgcGxvdF9pbXBvcnRhbmNlX2dncGFpcnMoaW1wb3J0YW5jZV9mcmFtZSwKICAgICAgbWVhc3VyZXMgPSBuYW1lcyhpbXBvcnRhbmNlX2ZyYW1lKVtjKDIsIDQsIDUsIDMsIDcpXSwKICAgICAgbWFpbiA9ICJSZWxhdGlvbnMgYmV0d2VlbiBtZWFzdXJlcyBvZiBpbXBvcnRhbmNlIikKCmBgYHtyfQpmb3Jlc3QgPC0gcmFuZG9tRm9yZXN0OjpyYW5kb21Gb3Jlc3QoU3BlY2llcyB+IC4sIGRhdGEgPSBpcmlzLCBsb2NhbEltcCA9IFRSVUUsIG50cmVlID0gMjAwKSAKCmZyYW1lIDwtIG1lYXN1cmVfaW1wb3J0YW5jZShmb3Jlc3QsIG1lYXN1cmVzID0gYygibWVhbl9taW5fZGVwdGgiLCAidGltZXNfYV9yb290IikpCgpwbG90X2ltcG9ydGFuY2VfZ2dwYWlycyhmcmFtZSwgbWVhc3VyZXMgPSBjKCJtZWFuX21pbl9kZXB0aCIsICJ0aW1lc19hX3Jvb3QiKSkKCmBgYAoKCgoKIyMjIyBwbG90X2ltcG9ydGFuY2VfcmFua2luZ3MKClBsb3QgaW1wb3J0YW5jZSBtZWFzdXJlcyByYW5raW5ncyB3aXRoIGdncGFpcnMKRGVzY3JpcHRpb24KUGxvdCBhZ2FpbnN0IGVhY2ggb3RoZXIgcmFua2luZ3Mgb2YgdmFyaWFibGVzIGFjY29yZGluZyB0byB2YXJpb3VzIG1lYXN1cmVzIG9mIGltcG9ydGFuY2UKCiAgICBwbG90X2ltcG9ydGFuY2VfcmFua2luZ3MoaW1wb3J0YW5jZV9mcmFtZSwKICAgICAgbWVhc3VyZXMgPSBuYW1lcyhpbXBvcnRhbmNlX2ZyYW1lKVtjKDIsIDQsIDUsIDMsIDcpXSwKICAgICAgbWFpbiA9ICJSZWxhdGlvbnMgYmV0d2VlbiByYW5raW5ncyBhY2NvcmRpbmcgdG8gZGlmZmVyZW50IG1lYXN1cmVzIikKICAgICAgCiAgICAgIApgYGB7cn0KCmZvcmVzdCA8LSByYW5kb21Gb3Jlc3Q6OnJhbmRvbUZvcmVzdChTcGVjaWVzIH4gLiwgZGF0YSA9IGlyaXMsIGxvY2FsSW1wID0gVFJVRSwgbnRyZWUgPSAzMDApIAoKZnJhbWUgPC0gbWVhc3VyZV9pbXBvcnRhbmNlKGZvcmVzdCwgbWVhc3VyZXMgPSBjKCJtZWFuX21pbl9kZXB0aCIsICJ0aW1lc19hX3Jvb3QiKSkKCnBsb3RfaW1wb3J0YW5jZV9nZ3BhaXJzKGZyYW1lLCBtZWFzdXJlcyA9IGMoIm1lYW5fbWluX2RlcHRoIiwgInRpbWVzX2Ffcm9vdCIpKQoKYGBgCiAgICAgIAogICAgICAKICAgICAgCiAgICAgIAojIyMjIHBsb3RfbWluX2RlcHRoX2Rpc3RyaWJ1dGlvbgpQbG90IHRoZSBkaXN0cmlidXRpb24gb2YgbWluaW1hbCBkZXB0aCBpbiBhIHJhbmRvbSBmb3Jlc3QKRGVzY3JpcHRpb24KUGxvdCB0aGUgZGlzdHJpYnV0aW9uIG9mIG1pbmltYWwgZGVwdGggaW4gYSByYW5kb20gZm9yZXN0CgogICAgICAgIHBsb3RfbWluX2RlcHRoX2Rpc3RyaWJ1dGlvbihtaW5fZGVwdGhfZnJhbWUsIGsgPSAxMCwgbWluX25vX29mX3RyZWVzID0gMCwKICAgICAgICAgbWVhbl9zYW1wbGUgPSAidG9wX3RyZWVzIiwgbWVhbl9zY2FsZSA9IEZBTFNFLCBtZWFuX3JvdW5kID0gMiwKICAgICAgICBtYWluID0gIkRpc3RyaWJ1dGlvbiBvZiBtaW5pbWFsIGRlcHRoIGFuZCBpdHMgbWVhbiIpIAogICAgICAgIAogICAgICAgIApgYGB7cn0KIGZvcmVzdCA8LSByYW5kb21Gb3Jlc3Q6OnJhbmRvbUZvcmVzdChTcGVjaWVzIH4gLiwgZGF0YSA9IGlyaXMsIG50cmVlID0gMzAwKQogICAgcGxvdF9taW5fZGVwdGhfZGlzdHJpYnV0aW9uKG1pbl9kZXB0aF9kaXN0cmlidXRpb24oZm9yZXN0KSkKCmBgYAogICAgICAgIAoKCiMjIyMgIHBsb3RfbWluX2RlcHRoX2ludGVyYWN0aW9ucwpQbG90IHRoZSB0b3AgbWVhbiBjb25kaXRpb25hbCBtaW5pbWFsIGRlcHRoCgoKICAgIHBsb3RfbWluX2RlcHRoX2ludGVyYWN0aW9ucyhpbnRlcmFjdGlvbnNfZnJhbWUsIGsgPSAzMCwKICAgICAgbWFpbiA9IHBhc3RlMCgiTWVhbiBtaW5pbWFsIGRlcHRoIGZvciAiLCBwYXN0ZTAoaywKICAgICAgIiBtb3N0IGZyZXF1ZW50IGludGVyYWN0aW9ucyIpKSkgCiAgICAgIAogICAgICAKYGBge3J9Cgpmb3Jlc3QgPC0gcmFuZG9tRm9yZXN0OjpyYW5kb21Gb3Jlc3QoU3BlY2llcyB+IC4sIGRhdGEgPSBpcmlzLCBudHJlZSA9IDEwMCkKCnBsb3RfbWluX2RlcHRoX2ludGVyYWN0aW9ucyhtaW5fZGVwdGhfaW50ZXJhY3Rpb25zKGZvcmVzdCwgYygiUGV0YWwuV2lkdGgiLCAiUGV0YWwuTGVuZ3RoIikpKQoKYGBgCiAgICAgIAoKCiMjIyMgcGxvdF9tdWx0aV93YXlfaW1wb3J0YW5jZQoKTXVsdGktd2F5IGltcG9ydGFuY2UgcGxvdAoKUGxvdCB0d28gb3IgdGhyZWUgbWVhc3VyZXMgb2YgaW1wb3J0YW5jZSBvZiB2YXJpYWJsZXMgaW4gYSByYW5kb20gZm9yZXMuIENob29zZSBpbXBvcnRhbmNlIG1lYS0gc3VyZXMgZnJvbSB0aGUgY29sbmFtZXMoaW1wb3J0YW5jZV9mcmFtZSkuIAoKYGBge3J9CmZvcmVzdCA8LSByYW5kb21Gb3Jlc3Q6OnJhbmRvbUZvcmVzdChTcGVjaWVzIH4gLiwgZGF0YSA9IGlyaXMsIGxvY2FsSW1wID0gVFJVRSkKcGxvdF9tdWx0aV93YXlfaW1wb3J0YW5jZShtZWFzdXJlX2ltcG9ydGFuY2UoZm9yZXN0KSkKYGBgCgoKCgoKIyMjIyBwbG90X3ByZWRpY3RfaW50ZXJhY3Rpb24KClBsb3QgdGhlIHByZWRpY3Rpb24gb2YgdGhlIGZvcmVzdCBmb3IgYSBncmlkIG9mIHZhbHVlcyBvZiB0d28gbnVtZXJpY2FsIHZhcmlhYmxlcwoKIFBsb3QgdGhlIHByZWRpY3Rpb24gb2YgdGhlIGZvcmVzdCBmb3IgYSBncmlkIG9mIHZhbHVlcyBvZiB0d28gbnVtZXJpY2FsIHZhcmlhYmxlcwoKYGBge3J9CgogICAgZm9yZXN0IDwtIHJhbmRvbUZvcmVzdDo6cmFuZG9tRm9yZXN0KFNwZWNpZXMgfi4sIGRhdGEgPSBpcmlzKQogICAgcGxvdF9wcmVkaWN0X2ludGVyYWN0aW9uKGZvcmVzdCwgaXJpcywgIlBldGFsLldpZHRoIiwgIlNlcGFsLldpZHRoIikKICAgIApgYGAKCg==