pub enum MaternIdentifiability {
None,
CenterSumToZero,
CenterLinearOrthogonal,
FrozenTransform {
transform: Array2<f64>,
nullspace_shrinkage_survived: Option<bool>,
},
}Expand description
Per-smooth identifiability policy for Matérn kernel coefficients.
These constraints are geometric (center-based), so they are stable across train/predict and do not depend on response weights.
Variants§
None
Keep the unconstrained kernel coefficient space.
CenterSumToZero
Enforce 1^T alpha = 0 at center locations (removes constant drift).
CenterLinearOrthogonal
Enforce orthogonality to [1, c_1, ..., c_d] at centers.
Use this when explicit linear terms should own global trends.
FrozenTransform
Freeze a fit-time transform Z so prediction cannot drift.
nullspace_shrinkage_survived freezes the double-penalty
nullspace-shrinkage decision alongside the transform (gam#787/#860). The
matern double-penalty path emits a DoublePenaltyNullspace candidate iff
build_nullspace_shrinkage_penalty(&projected_kernel) finds a near-zero
eigenvalue — but that spectral test is κ-DEPENDENT (its tolerance scales
with λ_max), so a near-zero eigenvalue can cross the threshold as the
κ-optimizer rebuilds the design at each trial length-scale. That flips the
learned-penalty count 6↔7 across the rebuild and the rebuilt design’s ρ
dimension then disagrees with the frozen joint setup (“joint hyper rho
dimension mismatch” → every κ seed fails startup validation). Freezing the
bootstrap-κ decision here (Some(true) = always emit the shrinkage
candidate, Some(false) = never) keeps the penalty count INVARIANT across
the κ rebuild so κ actually optimizes. None = decide via the spectral
test (the non-frozen / cold-build behavior; also the serde back-compat
default for transforms frozen before this field existed).
Trait Implementations§
Source§impl Clone for MaternIdentifiability
impl Clone for MaternIdentifiability
Source§fn clone(&self) -> MaternIdentifiability
fn clone(&self) -> MaternIdentifiability
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for MaternIdentifiability
impl Debug for MaternIdentifiability
Source§impl Default for MaternIdentifiability
impl Default for MaternIdentifiability
Source§fn default() -> MaternIdentifiability
fn default() -> MaternIdentifiability
Source§impl<'de> Deserialize<'de> for MaternIdentifiability
impl<'de> Deserialize<'de> for MaternIdentifiability
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Auto Trait Implementations§
impl Freeze for MaternIdentifiability
impl RefUnwindSafe for MaternIdentifiability
impl Send for MaternIdentifiability
impl Sync for MaternIdentifiability
impl Unpin for MaternIdentifiability
impl UnsafeUnpin for MaternIdentifiability
impl UnwindSafe for MaternIdentifiability
Blanket Implementations§
impl<T> Allocation for T
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<T> DistributionExt for Twhere
T: ?Sized,
impl<T> DistributionExt for Twhere
T: ?Sized,
impl<T, U> Imply<T> for U
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 moreSource§impl<T> Pointable for T
impl<T> Pointable for T
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
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>
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
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
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.