Plot model trees deepness
Visualizes distributions related to depth of tree leafs.
xgb.plot.deepness uses base R graphics, while
xgb.ggplot.deepness uses the ggplot backend.
xgb.ggplot.deepness(model = NULL, which = c("2x1", "max.depth", "med.depth", "med.weight"))xgb.plot.deepness(model = NULL, which = c("2x1", "max.depth", "med.depth", "med.weight"), plot = TRUE, ...)
- either an
xgb.Boostermodel generated by the
xgb.trainfunction or a data.table result of the
- which distribution to plot (see details).
- (base R barplot) whether a barplot should be produced. If FALSE, only a data.table is returned.
- other parameters passed to
which="2x1", two distributions with respect to the leaf depth
are plotted on top of each other:
- the distribution of the number of leafs in a tree model at a certain depth;
- the distribution of average weighted number of observations ("cover") ending up in leafs at certain depth.
Those could be helpful in determining sensible ranges of the
which="med.depth", plots of either maximum or median depth
per tree with respect to tree number are created. And
which="med.weight" allows to see how
a tree's median absolute leaf weight changes through the iterations.
This function was inspired by the blog post http://aysent.github.io/2015/11/08/random-forest-leaf-visualization.html.
Other than producing plots (when
xgb.plot.deepnessfunction silently returns a processed data.table where each row corresponds to a terminal leaf in a tree model, and contains information about leaf's depth, cover, and weight (which is used in calculating predictions).The
xgb.ggplot.deepnesssilently returns either a list of two ggplot graphs when
which="2x1"or a single ggplot graph for the other
data(agaricus.train, package='xgboost') # Change max_depth to a higher number to get a more significant result bst <- xgboost(data = agaricus.train$data, label = agaricus.train$label, max_depth = 6, eta = 0.1, nthread = 2, nrounds = 50, objective = "binary:logistic", subsample = 0.5, min_child_weight = 2) xgb.plot.deepness(bst) xgb.ggplot.deepness(bst) xgb.plot.deepness(bst, which='max.depth', pch=16, col=rgb(0,0,1,0.3), cex=2) xgb.plot.deepness(bst, which='med.weight', pch=16, col=rgb(0,0,1,0.3), cex=2)