Chipman 2010 - Sum-of-Trees Model and Regularization Prior

Summary

BART models as a sum of small trees and places an independent prior on each tree’s structure and leaf values that forces every tree to be a weak learner. Three data-calibrated knobs ( for tree depth; for leaf shrinkage; for noise) plus define the whole prior; the defaults are , , , .

Overview

A single regression tree is a piecewise-constant function. A sum of many trees is an additive model with multivariate components: trees using one variable are main effects, trees splitting on several variables are interactions of varying order. The model is heavily over-parametrized (“overcomplete basis”), so the prior, not the likelihood, does most of the regularizing. This is the sense in which BART is a prior over functions.

Main Content

Single tree and sum of trees

Binary regression tree

is a binary tree with interior decision rules vs and terminal nodes; are the terminal-node (leaf) parameters. returns the of the terminal node that reaches. The single-tree model is , (eq. 3).

Sum-of-trees model

Each is only a part of . A tree depending on one variable is a main effect; on several variables, an interaction. If every tree uses one variable the model is an additive function of step functions.

Prior factorization

Independence and symmetry (eqs. 5-6)

All share one form and all share one form, taken from the Bayesian CART prior of Chipman-George-McCulloch (1998, “CGM98”).

Tree prior

Depth-penalized tree prior

(i) A node at depth is nonterminal with probability

(ii) The splitting variable at an interior node is uniform over available variables. (iii) The splitting value is uniform over the discrete set of available split points (invariant to monotone transformations of the predictor; the authors note this is not strictly coherent).

With the prior puts probability on trees with terminal nodes: shallow trees dominate, but data can still grow large trees (a single-tree fit placed substantial posterior mass on size-17 trees in one simulated example).

# Reproduce the 0.05 / 0.55 / 0.28 / 0.09 / 0.03 terminal-node probabilities
import numpy as np
from functools import lru_cache
a, b, MAXN = 0.95, 2.0, 8
p_split = lambda d: a * (1 + d) ** (-b)
 
@lru_cache(None)
def n_leaf_dist(d):
    ps = p_split(d)
    out = np.zeros(MAXN + 1); out[1] = 1 - ps          # stays a leaf
    if d > 12:                                          # truncate recursion
        return tuple(out)
    c = np.array(n_leaf_dist(d + 1))
    out += ps * np.convolve(c, c)[: MAXN + 1]           # splits into two independent subtrees
    return tuple(out)
 
pr = n_leaf_dist(0)
print(np.round(pr[1:5], 2), round(1 - sum(pr[1:5]), 2))  # [0.05 0.55 0.28 0.09] 0.03

Leaf prior

Conjugate leaf prior and its calibration

, conjugate so that can be integrated out. Because the are a priori i.i.d., the induced prior on is . Choose so that this prior covers :

Practically: rescale to , set and

Default (about 95% prior probability that ); works well. Larger or larger means tighter shrinkage.

The scaling is the key: as grows, each tree’s contribution shrinks, so the total prior variance of stays fixed. This is the exact analogue of the learning-rate shrinkage in gradient boosting (Friedman 2001), and it is the same argument that gives a Gaussian-process limit for wide neural networks (see Izmailov 2021 - Priors, Prior Predictive and Cold Posteriors). No predictor rescaling is needed because splits are invariant to monotone transforms (unlike neural nets).

Noise prior

Scaled inverse chi-square prior on

. Choose for shape, then so that for a rough overestimate (either the sample SD of , “naive”, or the residual SD of a least-squares fit, “linear model”).

Named settings (Fig. 1, ): conservative , default , aggressive . Avoid (too much mass on tiny causes overfitting). Authors admit the data-calibration sacrifices strict Bayesian coherence but intend only to keep the prior from conflicting with the data.

Number of trees

Rather than a prior on or cross-validation, the authors recommend starting at and checking one or two other values. Predictive accuracy improves sharply as rises from 1, plateaus, then degrades very slowly; so for prediction one only needs to avoid too small. For variable selection a small (10-50) is preferred (see Chipman 2010 - Backfitting MCMC and Posterior Inference).

Hyperparameter summary

SymbolRoleDefaultRange explored
number of trees20050, 200 (CV); 10-200 (selection)
tree depth penalty(0.95, 2)fixed
leaf shrinkage, 21, 2, 3, 5
noise prior(3, 0.90)(3,0.90), (3,0.99), (10,0.75)

Examples

Prior on the regression function. With and rescaled to : , and the induced prior on is , SD 0.25 = half-range over . Each individual leaf is nearly negligible.

PyMC sketch (pymc-bart, untested here).

import pymc as pm, pymc_bart as pmb
with pm.Model() as m:
    mu = pmb.BART("mu", X=X, Y=y, m=200)            # sum of 200 weak trees
    sigma = pm.HalfNormal("sigma", y.std())
    pm.Normal("y", mu=mu, sigma=sigma, observed=y)
    idata = pm.sample()                              # PGBART for trees, NUTS for sigma

Mark: untested sketch; pymc-bart uses PGBART rather than the MH moves of this paper.

Connections

See Also

Chipman 2010 - BART - Overview, Chipman 2010 - Backfitting MCMC and Posterior Inference, Gaussian Process Regression.