pub struct TDistributionLoss { /* private fields */ }Expand description
Student’s t-distribution loss function (robust M-estimator).
The t-distribution loss is derived from the negative log-likelihood of Student’s t-distribution. It provides heavy tails for robustness against outliers, with the degrees of freedom parameter ν controlling the tail heaviness.
§Mathematical Definition
ρ(s) = (ν + 1)/2 · log(1 + s/ν)
ρ'(s) = (ν + 1)/(2(ν + s))
ρ''(s) = -(ν + 1)/(2(ν + s)²)where ν is the degrees of freedom and s = ||r||² is the squared residual norm.
§Properties
- Heavy tails: Provides robustness through heavier tails than Gaussian
- Parameter control: Small ν → heavy tails (more robust), large ν → Gaussian (less robust)
- Well-founded: Based on maximum likelihood estimation with t-distribution
- Smooth: Continuous derivatives for all s > 0
§Degrees of Freedom Selection
- ν = 3-4: Very robust, heavy outlier suppression
- ν = 5: Recommended default, good balance
- ν = 10: Moderate robustness
- ν → ∞: Converges to Gaussian (L2 loss)
§Use Cases
- Robust regression with unknown outlier distribution
- SLAM and pose graph optimization with loop closure outliers
- Bundle adjustment with incorrect feature matches
- Any optimization problem with heavy-tailed noise
§References
- Student’s t-distribution is widely used in robust statistics
- Applied in robust SLAM (e.g., Chebrolu et al. 2021, Agarwal et al.)
§Example
use apex_solver::core::loss_functions::{LossFunction, TDistributionLoss};
let t_loss = TDistributionLoss::new(5.0)?;
let [rho, rho_prime, _] = t_loss.evaluate(4.0);
// Robust to outliers with heavy tailsImplementations§
Source§impl TDistributionLoss
impl TDistributionLoss
Sourcepub fn new(nu: f64) -> ApexSolverResult<Self>
pub fn new(nu: f64) -> ApexSolverResult<Self>
Trait Implementations§
Source§impl Clone for TDistributionLoss
impl Clone for TDistributionLoss
Source§fn clone(&self) -> TDistributionLoss
fn clone(&self) -> TDistributionLoss
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for TDistributionLoss
impl Debug for TDistributionLoss
Auto Trait Implementations§
impl Freeze for TDistributionLoss
impl RefUnwindSafe for TDistributionLoss
impl Send for TDistributionLoss
impl Sync for TDistributionLoss
impl Unpin for TDistributionLoss
impl UnwindSafe for TDistributionLoss
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
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> DistributionExt for Twhere
T: ?Sized,
impl<T> DistributionExt for Twhere
T: ?Sized,
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>
Converts
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>
Converts
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 moreSource§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
The inverse inclusion map: attempts to construct
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
Checks if
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
Use with care! Same as
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
The inclusion map: converts
self to the equivalent element of its superset.