Module: aprender::bayesian

Public module of the aprender-core crate.

Source

crates/aprender-core/src/bayesian.rs or directory.

Example

use aprender::bayesian::{BetaBinomial, NormalInverseGamma, BayesianLinearRegression};
// See `cargo doc -p aprender-core --open` for full API reference.

Module summary

aprender::bayesian exposes the closed-form conjugate-prior distributions that make Bayesian updating tractable (Beta-Binomial, Dirichlet-Multinomial, Gamma-Poisson, Normal-Inverse-Gamma) plus full Bayesian linear and logistic regression. Conjugate priors give you posterior mean / mode / variance in constant time after each observation — ideal for online experiment analysis (A/B tests), bandits, and small-sample inference where you need uncertainty estimates not just point predictions.

Key types

TypeDescription
BetaBinomialBeta prior over a binomial proportion. uniform(), jeffreys(), new(alpha, beta) constructors; update(successes, trials) for sequential inference.
DirichletMultinomialDirichlet prior over multinomial probabilities.
GammaPoissonGamma prior over a Poisson rate.
NormalInverseGammaNIG prior over unknown mean + variance.
BayesianLinearRegressionLinear regression with full posterior over coefficients + noise. Exposes predict, log_likelihood, aic, bic.
BayesianLogisticRegressionLaplace-approximated Bayesian logistic regression.

Usage patterns

Pattern 1: Sequential A/B-test analysis with Beta-Binomial

use aprender::bayesian::BetaBinomial;

// Start from a Jeffreys prior, then ingest 7 successes out of 10 trials.
let mut posterior = BetaBinomial::jeffreys();
posterior.update(7, 10);

let mean = posterior.posterior_mean();
let var = posterior.posterior_variance();
println!("posterior mean = {:.3}  variance = {:.4}", mean, var);
assert!(mean > 0.5);

Pattern 2: Bayesian linear regression with predictive variance

use aprender::bayesian::BayesianLinearRegression;
use aprender::primitives::{Matrix, Vector};

let x = Matrix::from_vec(4, 1, vec![1.0, 2.0, 3.0, 4.0]).expect("4x1");
let y = Vector::from_slice(&[3.0, 5.0, 7.0, 9.0]);

let mut blr = BayesianLinearRegression::new(1);
blr.fit(&x, &y).expect("blr fit");

let coefs = blr.posterior_mean().expect("fitted");
let noise = blr.noise_variance().expect("fitted");
println!("posterior_mean = {:?}  noise_var = {:?}", coefs, noise);

let x_test = Matrix::from_vec(1, 1, vec![5.0]).expect("1x1");
let preds = blr.predict(&x_test).expect("predict");
println!("y(5) ≈ {:.2}", preds[0]);

See also

Full API

Run cargo doc -p aprender-core --open for the rendered rustdoc, or browse docs.rs/aprender for the published version.