Implements the unsupervised tree boosting method for learning probability distributions introduced by Awaya and Ma (2024). Provides model fitting, density evaluation, simulation, and diagnostic methods.
boostPM fits probability distributions with unsupervised tree boosting. The
method represents a density as an ensemble of tree-based probability measures,
allows analytic density evaluation, and provides a sampler from the fitted
distribution.
This repository is an in-development, CRAN-oriented package implementation.
The immutable research implementation used for the published work is retained
under original/, and documented regression cases are compared against it.
The package is not on CRAN yet. Install a development checkout with:
install.packages("/path/to/boostPM-cran", repos = NULL, type = "source")
Once the repository is public, a GitHub installation route can be used with
remotes::install_github("nawaya040/boostPM-cran").
library(boostPM)
set.seed(1)
data <- cbind(
rbeta(80, shape1 = 2, shape2 = 5),
rbeta(80, shape1 = 5, shape2 = 2)
)
support <- cbind(c(0, 0), c(1, 1))
set.seed(2)
fit <- fit_boostpm(
data,
Omega = support,
max_marginal_trees = 2,
max_dependence_trees = 2,
n_bins = 4,
max_split_depth = 1,
min_node_observations = 2,
c0 = 0.1,
gamma = 0.5,
add_noise = FALSE
)
log_density <- predict(fit, data, type = "log_density")
exp(log_density)
set.seed(3)
simulated <- simulate(fit, nsim = 10)
The fit is a boostPM_fit object whose components include serialized trees,
residual coordinates, per-tree and held-out diagnostics, support, and variable
importance.
fit_boostpm() returns silently. Use the S3 methods to inspect the fit and
its diagnostics.
print(fit)
summary(fit)
plot(fit, type = "variable_importance")
The plot method also supports type = "tree_node_counts" and
type = "tree_depths".
data must be a finite numeric matrix with observations in rows.Omega has one lower and upper bound per variable. Training data
must be strictly inside those bounds.predict(fit, newdata, type = "log_density") returns log density.
Evaluation outside Omega returns -Inf.set.seed()
before each stochastic operation when reproducibility is needed.The introductory vignette is available after installation:
vignette("boostPM-introduction", package = "boostPM")
Please cite the method paper:
Awaya, N. and Ma, L. (2024). Unsupervised Tree Boosting for Learning Probability Distributions. Journal of Machine Learning Research, 25, 1-52.
Use citation("boostPM") for the installed-package citation record.
Routine checks run on Windows, macOS, and Ubuntu through GitHub Actions.
Original-versus-package regression and longer statistical validation runners
live under validation/. Their results and performance records are documented
under docs/ and benchmarks/.