pub struct ElasticNetFit { /* private fields */ }Expand description
A fitted elastic-net regression model and its diagnostics.
Elastic net minimizes
(1/2n)‖y − Xβ‖² + λ[ α‖β_pen‖₁ + ½(1 − α)‖β_pen‖² ],
blending the lasso (α = 1) and ridge (α → 0) penalties. The α mixing
parameter controls sparsity-versus-grouping: pure lasso arbitrarily picks one
of a set of correlated predictors, while a little ridge (α < 1) shares the
coefficient across the group. Fit by cyclic coordinate descent with
soft-thresholding (glmnet-style).
§Intercept and scaling
Identical conventions to LassoFit: a detected constant
column is an unpenalized intercept, predictors are standardized
internally, and λ is on the standardized (1/2n)-objective scale.
§Effective degrees of freedom
Unlike lasso, where the degrees of freedom are just the active-set size, the
ridge part shrinks the surviving coefficients, so the elastic net spends
fewer than |active set| degrees of freedom. This type reports the
shrinkage-aware trace
df = tr[ Z_A (Z_Aᵀ Z_A + n·λ(1 − α) I)⁻¹ Z_Aᵀ ] (+1 for the intercept),
over the standardized active columns Z_A. It reduces to |active set| at
α = 1 (recovering the lasso count) and to the full ridge effective df when
nothing is zeroed. The information criteria use it.
Implementations§
Source§impl ElasticNetFit
impl ElasticNetFit
Sourcepub fn new(
x: Array2<f64>,
y: Array1<f64>,
lambda: f64,
alpha: f64,
) -> Result<Self>
pub fn new( x: Array2<f64>, y: Array1<f64>, lambda: f64, alpha: f64, ) -> Result<Self>
Fit elastic-net regression of y on X with penalty lambda ≥ 0 and
mixing alpha ∈ [0, 1] (default tolerance 1e-7, up to 10_000 sweeps).
alpha = 1 is pure lasso (equivalent to LassoFit);
alpha = 0 is pure ridge on the standardized scale.
§Errors
RegressionError::EmptyInput/RegressionError::ShapeMismatch.RegressionError::InvalidParameteriflambda < 0oralpha ∉ [0, 1].RegressionError::NotConvergedif coordinate descent does not converge within the iteration budget.
Sourcepub fn with_options(
x: Array2<f64>,
y: Array1<f64>,
lambda: f64,
alpha: f64,
tol: f64,
max_iter: usize,
) -> Result<Self>
pub fn with_options( x: Array2<f64>, y: Array1<f64>, lambda: f64, alpha: f64, tol: f64, max_iter: usize, ) -> Result<Self>
Like ElasticNetFit::new with an explicit tolerance and sweep cap.
Sourcepub fn n_observations(&self) -> usize
pub fn n_observations(&self) -> usize
Number of observations.
Sourcepub fn n_parameters(&self) -> usize
pub fn n_parameters(&self) -> usize
Number of coefficients (design columns, intercept included).
Sourcepub fn has_intercept(&self) -> bool
pub fn has_intercept(&self) -> bool
Whether an unpenalized intercept is present.
Sourcepub fn iterations(&self) -> usize
pub fn iterations(&self) -> usize
Coordinate-descent sweeps taken to converge.
Sourcepub fn design_matrix(&self) -> ArrayView2<'_, f64>
pub fn design_matrix(&self) -> ArrayView2<'_, f64>
The design matrix as fitted.
Sourcepub fn coefficients(&self) -> ArrayView1<'_, f64>
pub fn coefficients(&self) -> ArrayView1<'_, f64>
Elastic-net coefficients, aligned to the design columns. Coefficients
shrunk out are exactly 0.0.
Sourcepub fn fitted_values(&self) -> ArrayView1<'_, f64>
pub fn fitted_values(&self) -> ArrayView1<'_, f64>
Fitted values ŷ = Xβ.
Sourcepub fn residuals(&self) -> ArrayView1<'_, f64>
pub fn residuals(&self) -> ArrayView1<'_, f64>
Residuals y − ŷ.
Sourcepub fn residual_sum_of_squares(&self) -> f64
pub fn residual_sum_of_squares(&self) -> f64
Residual sum of squares.
Sourcepub fn response(&self) -> ArrayView1<'_, f64>
pub fn response(&self) -> ArrayView1<'_, f64>
Response vector.
Sourcepub fn active_set(&self) -> Vec<usize>
pub fn active_set(&self) -> Vec<usize>
Indices of the design columns with non-zero coefficients — the active set (excludes the intercept).
Sourcepub fn effective_df(&self) -> f64
pub fn effective_df(&self) -> f64
Shrinkage-aware effective degrees of freedom (see the type docs): the active-set trace under the ridge part, plus one for the intercept.
Sourcepub fn log_likelihood(&self) -> f64
pub fn log_likelihood(&self) -> f64
Gaussian log-likelihood at the fitted residual variance.
Trait Implementations§
Source§impl Clone for ElasticNetFit
impl Clone for ElasticNetFit
Source§fn clone(&self) -> ElasticNetFit
fn clone(&self) -> ElasticNetFit
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl Freeze for ElasticNetFit
impl RefUnwindSafe for ElasticNetFit
impl Send for ElasticNetFit
impl Sync for ElasticNetFit
impl Unpin for ElasticNetFit
impl UnsafeUnpin for ElasticNetFit
impl UnwindSafe for ElasticNetFit
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
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> 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.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.