pub struct TreeSlot { /* private fields */ }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
impl TreeSlot
Sourcepub fn new(
tree_config: TreeConfig,
detector: Box<dyn DriftDetector>,
max_tree_samples: Option<u64>,
) -> Self
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.
Sourcepub fn from_trees(
active: HoeffdingTree,
alternate: Option<HoeffdingTree>,
tree_config: TreeConfig,
detector: Box<dyn DriftDetector>,
max_tree_samples: Option<u64>,
) -> Self
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.
Sourcepub fn train_and_predict(
&mut self,
features: &[f64],
gradient: f64,
hessian: f64,
) -> f64
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 viaclone_freshso it monitors the new tree from a clean state.
Sourcepub fn predict(&self, features: &[f64]) -> f64
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.
Sourcepub fn predict_with_variance(&self, features: &[f64]) -> (f64, f64)
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).
Sourcepub fn n_samples_seen(&self) -> u64
pub fn n_samples_seen(&self) -> u64
Total samples the active tree has seen.
Sourcepub fn has_alternate(&self) -> bool
pub fn has_alternate(&self) -> bool
Whether an alternate tree is currently being trained.
Sourcepub fn split_gains(&self) -> &[f64]
pub fn split_gains(&self) -> &[f64]
Accumulated split gains per feature from the active tree.
Sourcepub fn active_tree(&self) -> &HoeffdingTree
pub fn active_tree(&self) -> &HoeffdingTree
Immutable access to the active tree.
Sourcepub fn alternate_tree(&self) -> Option<&HoeffdingTree>
pub fn alternate_tree(&self) -> Option<&HoeffdingTree>
Immutable access to the alternate tree (if one is being trained).
Sourcepub fn tree_config(&self) -> &TreeConfig
pub fn tree_config(&self) -> &TreeConfig
Immutable access to the tree configuration.
Sourcepub fn detector(&self) -> &dyn DriftDetector
pub fn detector(&self) -> &dyn DriftDetector
Immutable access to the drift detector.
Sourcepub fn detector_mut(&mut self) -> &mut dyn DriftDetector
pub fn detector_mut(&mut self) -> &mut dyn DriftDetector
Mutable access to the drift detector.
Sourcepub fn alt_detector(&self) -> Option<&dyn DriftDetector>
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.
Sourcepub fn alt_detector_mut(&mut self) -> Option<&mut dyn DriftDetector>
pub fn alt_detector_mut(&mut self) -> Option<&mut dyn DriftDetector>
Mutable access to the alternate drift detector.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for TreeSlot
impl !RefUnwindSafe for TreeSlot
impl Send for TreeSlot
impl Sync for TreeSlot
impl Unpin for TreeSlot
impl UnsafeUnpin for TreeSlot
impl !UnwindSafe for TreeSlot
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more