pub struct RFECV<F> { /* private fields */ }Expand description
Recursive Feature Elimination with Cross-Validation.
Like RFE, but uses cross-validation scores to determine the optimal
number of features. The user supplies a vector of per-feature-count CV
scores (e.g., from running RFE with different n_features_to_select
values), and RFECV picks the number that maximises the score.
§Examples
use ferrolearn_preprocess::rfe::RFECV;
use ferrolearn_core::traits::Transform;
use ndarray::array;
let importances = array![0.5, 0.3, 0.2];
// CV scores for selecting 1, 2, 3 features:
let cv_scores = vec![0.85, 0.95, 0.90];
let rfecv = RFECV::<f64>::new(&importances, &cv_scores, 1).unwrap();
// Best is 2 features (score 0.95)
assert_eq!(rfecv.n_features_selected(), 2);
let x = array![[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]];
let out = rfecv.transform(&x).unwrap();
assert_eq!(out.ncols(), 2);Implementations§
Source§impl<F: Float + Send + Sync + 'static> RFECV<F>
impl<F: Float + Send + Sync + 'static> RFECV<F>
Sourcepub fn new(
importances: &Array1<F>,
cv_scores: &[f64],
step: usize,
) -> Result<Self, FerroError>
pub fn new( importances: &Array1<F>, cv_scores: &[f64], step: usize, ) -> Result<Self, FerroError>
Create a new RFECV from pre-computed importances and CV scores.
§Parameters
importances— per-feature importance scores.cv_scores— CV score for each possible number of features (index 0 = 1 feature, index 1 = 2 features, …).step— features removed per iteration.
§Errors
FerroError::InvalidParameterif inputs are empty or mismatched.
Sourcepub fn optimal_n_features(&self) -> usize
pub fn optimal_n_features(&self) -> usize
Return the optimal number of features.
Sourcepub fn n_features_selected(&self) -> usize
pub fn n_features_selected(&self) -> usize
Return the number of selected features.
Sourcepub fn selected_indices(&self) -> &[usize]
pub fn selected_indices(&self) -> &[usize]
Return the indices of the selected features.
Trait Implementations§
Source§impl<F: Float + Send + Sync + 'static> Transform<ArrayBase<OwnedRepr<F>, Dim<[usize; 2]>>> for RFECV<F>
impl<F: Float + Send + Sync + 'static> Transform<ArrayBase<OwnedRepr<F>, Dim<[usize; 2]>>> for RFECV<F>
Source§fn transform(&self, x: &Array2<F>) -> Result<Array2<F>, FerroError>
fn transform(&self, x: &Array2<F>) -> Result<Array2<F>, FerroError>
Return a matrix containing only the optimally selected features.
§Errors
Returns FerroError::ShapeMismatch if column count does not match.
Source§type Error = FerroError
type Error = FerroError
The error type returned by
transform.Auto Trait Implementations§
impl<F> Freeze for RFECV<F>
impl<F> RefUnwindSafe for RFECV<F>where
F: RefUnwindSafe,
impl<F> Send for RFECV<F>where
F: Send,
impl<F> Sync for RFECV<F>where
F: Sync,
impl<F> Unpin for RFECV<F>where
F: Unpin,
impl<F> UnsafeUnpin for RFECV<F>
impl<F> UnwindSafe for RFECV<F>where
F: UnwindSafe,
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> 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 more