pub struct OnlineModelSelector { /* private fields */ }Expand description
Online model selector with cooling period and minimum sample requirements.
Wraps a BaselineComparator to prevent frequent model switching. The
selector delegates error tracking and best-entry detection to the
comparator, then applies two additional gates before committing to a
switch:
- The candidate must have at least
SelectorConfig::min_samples_before_switchtotal observations. - At least
SelectorConfig::cooling_periodsamples must have been recorded on the current best model since the last switch.
§Examples
use rill_ml::diagnostics::{OnlineModelSelector, SelectorConfig};
let mut selector = OnlineModelSelector::new(&["a", "b"], SelectorConfig::default()).unwrap();
selector.record(0, 1.0, 1.1).unwrap();
selector.record(1, 1.0, 0.9).unwrap();
let _ = selector.select();Implementations§
Source§impl OnlineModelSelector
impl OnlineModelSelector
Sourcepub fn new(names: &[&str], config: SelectorConfig) -> Result<Self, RillError>
pub fn new(names: &[&str], config: SelectorConfig) -> Result<Self, RillError>
Create a new model selector.
§Errors
Returns RillError::InvalidWindowSize if config.window_size is zero.
Returns RillError::EmptyFeatures if names is empty (delegated to
BaselineComparator::new).
Sourcepub fn record(
&mut self,
index: usize,
truth: f64,
prediction: f64,
) -> Result<(), RillError>
pub fn record( &mut self, index: usize, truth: f64, prediction: f64, ) -> Result<(), RillError>
Record a prediction from the model at index.
If index matches the current best model, the sample counter is
incremented (used for the cooling period).
§Errors
Returns RillError::DimensionMismatch if index is out of bounds,
and propagates any finiteness error from the underlying metric.
Sourcepub fn select(&mut self) -> Option<usize>
pub fn select(&mut self) -> Option<usize>
Select the best model, applying cooling period and minimum sample constraints.
Returns the index of the selected model, or None if no model has
enough samples yet. The method is &mut self because it calls
BaselineComparator::update_best internally.
Sourcepub const fn current_best(&self) -> Option<usize>
pub const fn current_best(&self) -> Option<usize>
Returns the index of the currently selected best model, if any.
Sourcepub fn current_best_name(&self) -> Option<&str>
pub fn current_best_name(&self) -> Option<&str>
Returns the name of the currently selected best model, if any.
Sourcepub const fn switch_count(&self) -> u64
pub const fn switch_count(&self) -> u64
Number of times the underlying comparator has switched its best model.
Sourcepub fn entry_count(&self) -> usize
pub fn entry_count(&self) -> usize
Number of models tracked by the selector.
Sourcepub fn entry_metrics(&self, index: usize) -> Option<&ComparatorEntry>
pub fn entry_metrics(&self, index: usize) -> Option<&ComparatorEntry>
Returns the metrics entry for the model at index, if it exists.
Trait Implementations§
Source§impl Clone for OnlineModelSelector
impl Clone for OnlineModelSelector
Source§fn clone(&self) -> OnlineModelSelector
fn clone(&self) -> OnlineModelSelector
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more