MiniBoosts
A collection of boosting algorithms written in Rust 🦀.

Some boosting algorithms use Gurobi optimizer,
so you must acquire a license to use this library.
If you have the license, you can use these boosting algorithms (boosters)
by specifying features = ["extended"] in Cargo.toml.
Note!
If you are trying to use the extended feature without a Gurobi license,
the compilation fails.
Why MiniBoosts?
I, a Ph.D. student, needed to implement boosting algorithms to show the effectiveness of a proposed algorithm. Some boosting algorithms for empirical risk minimization are implemented in Python 3, but three main issues exist.
- They are dedicated to boosting algorithm users, not to developers. Most algorithms are implemented by C/C++ internally, so implementing a new boosting algorithm by Python 3 results in a slow running time.
- These boosting algorithms are designed for a decision-tree weak learner even though the boosting protocol does not demand.
- No implementation for margin optimization boosting algorithms. Margin optimization is a better goal than empirical risk minimization in binary classification.
MiniBoosts is a crate to address the above issues. This crate provides:
- Two main traits, named Booster and WeakLearner, Some famous boosting algorithms, including AdaBoost, LPBoost, ERLPBoost, etc.
- Some weak learners, including Decision-Tree, Regression-Tree, etc.
Also, one can implement a new Booster or Weak Learner by implementing the above traits.
Features
Currently, I implemented the following Boosters and Weak Learners.
If you invent a new boosting algorithm,
you can introduce it by implementing Booster trait.
See cargo doc -F extended --open for details.
Boosters
BOOSTER |
FEATURE FLAG |
|---|---|
| AdaBoostby Freund and Schapire, 1997 | |
| AdaBoostVby Rätsch and Warmuth, 2005 | |
| SmoothBoostby Rocco A. Servedio, 2003 | |
| TotalBoostby Warmuth, Liao, and Rätsch, 2006 | extended |
| LPBoostby Demiriz, Bennett, and Shawe-Taylor, 2002 | extended |
| SoftBoostby Warmuth, Glocer, and Rätsch, 2007 | extended |
| ERLPBoostby Warmuth and Glocer, and Vishwanathan, 2008 | extended |
| CERLPBoost (Corrective ERLPBoost)by Shalev-Shwartz and Singer, 2010 | extended |
| MLPBoostby Mitsuboshi, Hatano, and Takimoto, 2022 | extended |
| GBM (Gradient Boosting Machine),by Jerome H. Friedman |
Weak Learners
WEAK LEARNER |
|---|
| DecisionTree (Decision Tree) |
| RegressionTree (Regression Tree) |
| NeuralNetwork (Experimental) |
Future work
-
Boosters
-
Weak Learners
- Bag of words
- TF-IDF
- RBF-Net
-
Others
- Parallelization
- LP/QP solver (This work allows you to use
extendedfeatures without a license).
How to use
You can see the document by cargo doc --open command.
You need to write the following line to Cargo.toml.
= { = "0.2.2" }
If you want to use extended features, such as LPBoost, specify the option:
= { = "0.2.2", = ["extended"] }
Here is a sample code:
use *;
Note: Currently, Regression tree is under re-desining, so one cannot use it in similarly.
If you use boosting for soft margin optimization, initialize booster like this:
let n_sample = sample.shape.0;
let nu = n_sample as f64 * 0.2;
let lpboost = init
.tolerance
.nu; // Setting the capping parameter.
Note that the capping parameter must satisfies 1 <= nu && nu <= n_sample.
Research feature
When you invent a new boosting algorithm and write a paper, you need to compare it to previous works to show the effectiveness of your one. One way to compare the algorithms is to plot the curve for objective value or train/test loss. This crate can output a CSV file for such values in each step.
Here is an example:
use *;
use Logger;
use SoftMarginObjective;
// Define a loss function
Further, one can log your algorithm by implementing Research trait.
Run cargo doc -F extended --open to see more information.