Skip to main content

TreeSlot

Struct TreeSlot 

Source
pub struct TreeSlot { /* private fields */ }
Available on crate feature alloc only.
Expand description

Manages the lifecycle of a single tree in the ensemble.

When the drift detector signals DriftSignal::Warning, an alternate tree begins training alongside the active tree. When DriftSignal::Drift is confirmed, the alternate replaces the active tree (or a fresh tree is created if no alternate exists). The drift detector is then reset via clone_fresh to monitor the new tree.

Implementations§

Source§

impl TreeSlot

Source

pub fn new( tree_config: TreeConfig, detector: Box<dyn DriftDetector>, max_tree_samples: Option<u64>, ) -> Self

Create a new TreeSlot with a fresh tree and drift detector.

The active tree starts as a single-leaf tree (prediction = 0.0). No alternate tree is created until a Warning signal is received.

Source

pub fn with_shadow_warmup( tree_config: TreeConfig, detector: Box<dyn DriftDetector>, max_tree_samples: Option<u64>, shadow_warmup: usize, ) -> Self

Create a new TreeSlot with graduated tree handoff enabled.

When shadow_warmup > 0, an always-on shadow tree is spawned immediately and trained alongside the active tree. After shadow_warmup samples, the shadow begins contributing to predict_graduated() predictions.

Source

pub fn from_trees( active: HoeffdingTree, alternate: Option<HoeffdingTree>, tree_config: TreeConfig, detector: Box<dyn DriftDetector>, max_tree_samples: Option<u64>, ) -> Self

Reconstruct a TreeSlot from pre-built trees and a fresh drift detector.

Used during model deserialization to restore tree state without replaying the training stream.

Source

pub fn train_and_predict( &mut self, features: &[f64], gradient: f64, hessian: f64, ) -> f64

Train the active tree (and alternate if it exists) on a single sample.

The absolute value of the gradient is fed to the drift detector as an error proxy (gradient = derivative of loss = prediction error signal).

§Returns

The prediction from the active tree before training on this sample. This ensures the prediction reflects only previously seen data, which is critical for unbiased gradient computation in the boosting loop.

§Drift handling
  • DriftSignal::Stable: no action.
  • DriftSignal::Warning: spawn an alternate tree if one is not already being trained. The alternate receives the same training sample.
  • DriftSignal::Drift: replace the active tree with the alternate (or a fresh tree if no alternate exists). The drift detector is reset via clone_fresh so it monitors the new tree from a clean state.
Source

pub fn predict(&self, features: &[f64]) -> f64

Predict without training.

Routes the feature vector through the active tree and returns the leaf value. Does not update any state.

Source

pub fn predict_with_variance(&self, features: &[f64]) -> (f64, f64)

Predict with variance for confidence estimation.

Returns (leaf_value, variance) where variance = 1 / (H_sum + lambda).

Source

pub fn predict_smooth(&self, features: &[f64], bandwidth: f64) -> f64

Predict using sigmoid-blended soft routing for smooth interpolation.

See crate::tree::hoeffding::HoeffdingTree::predict_smooth for details.

Source

pub fn predict_smooth_auto(&self, features: &[f64], bandwidths: &[f64]) -> f64

Predict using per-feature auto-calibrated bandwidths.

Source

pub fn predict_interpolated(&self, features: &[f64]) -> f64

Predict with parent-leaf linear interpolation.

Source

pub fn predict_sibling_interpolated( &self, features: &[f64], bandwidths: &[f64], ) -> f64

Predict with sibling-based interpolation for feature-continuous predictions.

Source

pub fn predict_graduated(&self, features: &[f64]) -> f64

Predict with graduated active-shadow blending.

When shadow_warmup > 0, blends the active tree’s prediction with the shadow’s prediction based on relative maturity:

  • Active weight decays from 1.0 to 0.0 as it ages from 80% to 120% of max_tree_samples
  • Shadow weight ramps from 0.0 to 1.0 over shadow_warmup samples after warmup

When shadow_warmup == 0 or no shadow exists, returns the active prediction.

Source

pub fn predict_graduated_sibling_interpolated( &self, features: &[f64], bandwidths: &[f64], ) -> f64

Predict with graduated blending + sibling interpolation (premium path).

Combines graduated active-shadow handoff with feature-continuous sibling interpolation for the smoothest possible prediction surface.

Source

pub fn shadow_warmup(&self) -> usize

Shadow warmup configuration (0 = disabled).

Source

pub fn replacements(&self) -> u64

Total number of tree replacements (drift or time-based).

Source

pub fn prediction_mean(&self) -> f64

Running mean of predictions from the active tree.

Source

pub fn prediction_std(&self) -> f64

Running standard deviation of predictions from the active tree.

Source

pub fn n_leaves(&self) -> usize

Number of leaves in the active tree.

Source

pub fn n_samples_seen(&self) -> u64

Total samples the active tree has seen.

Source

pub fn has_alternate(&self) -> bool

Whether an alternate tree is currently being trained.

Source

pub fn split_gains(&self) -> &[f64]

Accumulated split gains per feature from the active tree.

Source

pub fn active_tree(&self) -> &HoeffdingTree

Immutable access to the active tree.

Source

pub fn alternate_tree(&self) -> Option<&HoeffdingTree>

Immutable access to the alternate tree (if one is being trained).

Source

pub fn tree_config(&self) -> &TreeConfig

Immutable access to the tree configuration.

Source

pub fn detector(&self) -> &dyn DriftDetector

Immutable access to the drift detector.

Source

pub fn detector_mut(&mut self) -> &mut dyn DriftDetector

Mutable access to the drift detector.

Source

pub fn alt_detector(&self) -> Option<&dyn DriftDetector>

Immutable access to the alternate drift detector (always None in the current architecture – the alternate tree shares the main detector). Reserved for future use.

Source

pub fn alt_detector_mut(&mut self) -> Option<&mut dyn DriftDetector>

Mutable access to the alternate drift detector.

Source

pub fn reset(&mut self)

Reset to a completely fresh state: new tree, no alternate, reset detector.

Trait Implementations§

Source§

impl Clone for TreeSlot

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Debug for TreeSlot

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