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.03Leaf 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
| Symbol | Role | Default | Range explored |
|---|---|---|---|
| number of trees | 200 | 50, 200 (CV); 10-200 (selection) | |
| tree depth penalty | (0.95, 2) | fixed | |
| leaf shrinkage, | 2 | 1, 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 sigmaMark: untested sketch; pymc-bart uses PGBART rather than the MH moves of this paper.
Connections
- Prior calibration to the observed range is a form of data-informed prior; compare Prior Predictive Checking and Constructing Priors for Effect Sizes.
- Shrinkage-of-many-small-components is the same philosophy as Global-Local Shrinkage Priors.
See Also
Chipman 2010 - BART - Overview, Chipman 2010 - Backfitting MCMC and Posterior Inference, Gaussian Process Regression.