Skip to main content

OnlineModelSelector

Struct OnlineModelSelector 

Source
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:

  1. The candidate must have at least SelectorConfig::min_samples_before_switch total observations.
  2. At least SelectorConfig::cooling_period samples 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

Source

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).

Source

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.

Source

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.

Source

pub const fn current_best(&self) -> Option<usize>

Returns the index of the currently selected best model, if any.

Source

pub fn current_best_name(&self) -> Option<&str>

Returns the name of the currently selected best model, if any.

Source

pub const fn switch_count(&self) -> u64

Number of times the underlying comparator has switched its best model.

Source

pub fn entry_count(&self) -> usize

Number of models tracked by the selector.

Source

pub fn entry_metrics(&self, index: usize) -> Option<&ComparatorEntry>

Returns the metrics entry for the model at index, if it exists.

Source

pub fn reset(&mut self)

Reset the selector and underlying comparator to their initial state.

The number of tracked entries is preserved; only their data and the selection state are cleared.

Trait Implementations§

Source§

impl Clone for OnlineModelSelector

Source§

fn clone(&self) -> OnlineModelSelector

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for OnlineModelSelector

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V