Skip to main content

AdaptiveLeafModel

Struct AdaptiveLeafModel 

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

Leaf model that starts as closed-form and promotes to a more complex model when the Hoeffding bound confirms it is statistically superior.

Runs a shadow model alongside the active (closed-form) model. On each update, both models are trained and their per-sample losses compared using the second-order Taylor approximation:

loss_i = gradient * prediction + 0.5 * hessian * prediction^2
advantage_i = loss_active_i - loss_shadow_i

When mean(advantage) > epsilon where epsilon is the Hoeffding bound (using the tree’s delta parameter), the shadow model is promoted to active and the overhead drops to zero.

This uses the same statistical guarantee as the tree’s split decisions – no arbitrary thresholds.

Implementations§

Source§

impl AdaptiveLeafModel

Source

pub fn new( shadow: Box<dyn LeafModel>, promote_to: LeafModelType, delta: f64, seed: u64, ) -> Self

Create a new adaptive leaf model.

The active model starts as ClosedFormLeaf. The shadow model is the candidate that will be promoted if it proves statistically superior.

Trait Implementations§

Source§

impl LeafModel for AdaptiveLeafModel

Source§

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

Produce a prediction given input features.
Source§

fn update(&mut self, features: &[f64], gradient: f64, hessian: f64, lambda: f64)

Update model parameters given a gradient, hessian, and regularization lambda.
Source§

fn clone_fresh(&self) -> Box<dyn LeafModel>

Create a fresh (zeroed / re-initialized) clone of this model’s architecture.
Source§

fn clone_warm(&self) -> Box<dyn LeafModel>

Create a warm clone preserving learned weights but resetting optimizer state. Read more
Source§

impl Send for AdaptiveLeafModel

Source§

impl Sync for AdaptiveLeafModel

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