#优化 #超参数 #估计量 #算法 #分类 #树结构 #帕尔岑

tpe

一个实现 TPE(树结构帕尔岑估计器)超参数优化算法的库

3 个不稳定版本

0.2.0 2022年1月10日
0.1.1 2021年3月14日
0.1.0 2020年9月27日

#380 in 科学

Download history 24/week @ 2024-03-14 23/week @ 2024-03-21 30/week @ 2024-03-28 27/week @ 2024-04-04 25/week @ 2024-04-11 20/week @ 2024-04-18 24/week @ 2024-04-25 19/week @ 2024-05-02 19/week @ 2024-05-09 20/week @ 2024-05-16 13/week @ 2024-05-23 16/week @ 2024-05-30 14/week @ 2024-06-06 105/week @ 2024-06-13 76/week @ 2024-06-20 12/week @ 2024-06-27

209 每月下载量
serenade 中使用

MIT 许可证

28KB
496

tpe

tpe Documentation Actions Status Coverage Status License: MIT

此 crate 提供了一种使用 TPE(树结构帕尔岑估计器)的超参数优化算法。

示例

最小化二次函数的结果

一个优化简单二次函数的示例,该函数有一个数值参数和一个分类参数。

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 基准测试

有一个示例 examples/tpe-solver.rs 实现了 kurobako 解算器接口,因此您可以使用以下方式运行基准测试

$ 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

上述命令的结果(report.md)显示在此处此处

参考文献

请参阅以下关于 TPE 详细信息的论文

依赖关系

~5.5MB
~116K SLoC