#optimization #hyper-parameters #estimator #algorithm #categorical #tree-structured #parzen

tpe

A library that implements TPE, a hyperparameter optimization algorithm

3 unstable releases

0.2.0 Jan 10, 2022
0.1.1 Mar 14, 2021
0.1.0 Sep 27, 2020

#430 in Science

Download history 59/week @ 2024-11-16 34/week @ 2024-11-23 42/week @ 2024-11-30 88/week @ 2024-12-07 45/week @ 2024-12-14 2/week @ 2024-12-21 6/week @ 2024-12-28 60/week @ 2025-01-04 99/week @ 2025-01-11 412/week @ 2025-01-18 196/week @ 2025-01-25 115/week @ 2025-02-01 86/week @ 2025-02-08 74/week @ 2025-02-15 100/week @ 2025-02-22 115/week @ 2025-03-01

390 downloads per month
Used in serenade

MIT license

28KB
496 lines

tpe

tpe Documentation Actions Status Coverage Status License: MIT

This crate provides a hyperparameter optimization algorithm using TPE (Tree-structured Parzen Estimator).

Examples

Minimize the result of a quadratic function

An example optimizing a simple quadratic function which has one numerical and one categorical parameters.

use rand::SeedableRng as _;

let choices = [1, 10, 100];
let mut optim0 =
    tpe::TpeOptimizer::new(tpe::parzen_estimator(), tpe::range(-5.0, 5.0)?);
let mut optim1 =
    tpe::TpeOptimizer::new(tpe::histogram_estimator(), tpe::categorical_range(choices.len())?);

fn objective(x: f64, y: i32) -> f64 {
    x.powi(2) + y as f64
}

let mut best_value = std::f64::INFINITY;
let mut rng = rand::rngs::StdRng::from_seed(Default::default());
for _ in 0..100 {
   let x = optim0.ask(&mut rng)?;
   let y = optim1.ask(&mut rng)?;

   let v = objective(x, choices[y as usize]);
   optim0.tell(x, v)?;
   optim1.tell(y, v)?;
   best_value = best_value.min(v);
}

assert_eq!(best_value, 1.000098470725203);

kurobako benchmark

There is an example examples/tpe-solver.rs which implements the kurobako solver interface, so you can run a benchmark using TPE as follows:

$ PROBLEMS=$(kurobako problem-suite sigopt auc)
$ SOLVERS="$(kurobako solver command -- cargo run --release --example tpe-solver) $(kurobako solver optuna)"
$ kurobako studies --solvers $SOLVERS --problems $PROBLEMS --repeats 30 --budget 80 | kurobako run > result.json
$ cat result.json | kurobako report > report.md

The result (report.md) of the above commands is shown here.

References

Please refer to the following papers about the details of TPE:

Dependencies

~7MB
~132K SLoC