pub mod algorithm_tuners;
pub mod bayesian_optimization;
pub mod config;
pub mod cross_validation;
pub mod optimization_strategies;
pub mod search_spaces;
pub mod utilities;
pub use algorithm_tuners::AutoTuner;
pub use config::*;
pub use cross_validation::CrossValidator;
pub use optimization_strategies::ParameterGenerator;
pub use search_spaces::StandardSearchSpaces;
pub use utilities::*;
pub use algorithm_tuners::AutoTuner as Tuner;
pub fn default_tuning_config() -> TuningConfig {
TuningConfig::default()
}
pub fn random_search_config(n_trials: usize) -> TuningConfig {
TuningConfig {
strategy: SearchStrategy::RandomSearch { n_trials },
..Default::default()
}
}
pub fn bayesian_optimization_config(n_initial_points: usize) -> TuningConfig {
TuningConfig {
strategy: SearchStrategy::BayesianOptimization {
n_initial_points,
acquisition_function: AcquisitionFunction::ExpectedImprovement,
},
..Default::default()
}
}
pub fn grid_search_config() -> TuningConfig {
TuningConfig {
strategy: SearchStrategy::GridSearch,
..Default::default()
}
}
pub fn quick_tune_kmeans<F>(
data: scirs2_core::ndarray::ArrayView2<F>,
n_trials: Option<usize>,
) -> crate::error::Result<TuningResult>
where
F: scirs2_core::numeric::Float
+ scirs2_core::numeric::FromPrimitive
+ std::fmt::Debug
+ 'static
+ std::iter::Sum
+ std::fmt::Display
+ Send
+ Sync
+ scirs2_core::ndarray::ScalarOperand
+ std::ops::AddAssign
+ std::ops::SubAssign
+ std::ops::MulAssign
+ std::ops::DivAssign
+ std::ops::RemAssign
+ PartialOrd,
f64: From<F>,
{
let config = random_search_config(n_trials.unwrap_or(20));
let tuner = AutoTuner::new(config);
let search_space = StandardSearchSpaces::kmeans();
tuner.tune_kmeans(data, search_space)
}
pub fn quick_tune_dbscan<F>(
data: scirs2_core::ndarray::ArrayView2<F>,
n_trials: Option<usize>,
) -> crate::error::Result<TuningResult>
where
F: scirs2_core::numeric::Float
+ scirs2_core::numeric::FromPrimitive
+ std::fmt::Debug
+ 'static
+ std::iter::Sum
+ std::fmt::Display
+ Send
+ Sync
+ scirs2_core::ndarray::ScalarOperand
+ std::ops::AddAssign
+ std::ops::SubAssign
+ std::ops::MulAssign
+ std::ops::DivAssign
+ std::ops::RemAssign
+ PartialOrd,
f64: From<F>,
{
let config = random_search_config(n_trials.unwrap_or(20));
let tuner = AutoTuner::new(config);
let search_space = StandardSearchSpaces::dbscan();
tuner.tune_dbscan(data, search_space)
}
#[cfg(test)]
mod tests {
use super::*;
use scirs2_core::ndarray::Array2;
#[test]
fn test_default_tuning_config() {
let config = default_tuning_config();
assert_eq!(config.max_evaluations, 100);
}
#[test]
fn test_random_search_config() {
let config = random_search_config(50);
match config.strategy {
SearchStrategy::RandomSearch { n_trials } => assert_eq!(n_trials, 50),
_ => panic!("Expected RandomSearch strategy"),
}
}
#[test]
fn test_bayesian_optimization_config() {
let config = bayesian_optimization_config(10);
match config.strategy {
SearchStrategy::BayesianOptimization {
n_initial_points, ..
} => {
assert_eq!(n_initial_points, 10)
}
_ => panic!("Expected BayesianOptimization strategy"),
}
}
#[test]
fn test_quick_tune_kmeans() {
let data = Array2::from_shape_vec((50, 2), (0..100).map(|x| x as f64).collect())
.expect("Operation failed");
let result = quick_tune_kmeans(data.view(), Some(5));
match result {
Ok(_) => (),
Err(e) => panic!("quick_tune_kmeans failed: {:?}", e),
}
}
}