pub struct SequentialFeatureSelector { /* private fields */ }Expand description
A greedy sequential feature selector.
§Examples
use ferrolearn_preprocess::sequential_feature_selector::{
SequentialFeatureSelector, Direction,
};
use ndarray::{array, Array1, Array2};
let sfs = SequentialFeatureSelector::new(1, Direction::Forward);
let x = array![[1.0, 10.0, 0.1],
[2.0, 20.0, 0.2],
[3.0, 30.0, 0.3]];
let y = array![1.0, 2.0, 3.0];
// Score function: sum of selected column means (higher is better)
let score_fn = |x_sub: &Array2<f64>, _y: &Array1<f64>| -> Result<f64, _> {
let mean_sum: f64 = x_sub.columns().into_iter()
.map(|c| c.sum() / c.len() as f64)
.sum();
Ok(mean_sum)
};
let fitted = sfs.fit(&x, &y, score_fn).unwrap();
assert_eq!(fitted.selected_indices().len(), 1);
// Feature 1 (column means 10,20,30 → mean 20) should be selected
assert_eq!(fitted.selected_indices(), &[1]);Implementations§
Source§impl SequentialFeatureSelector
impl SequentialFeatureSelector
Sourcepub fn new(n_features_to_select: usize, direction: Direction) -> Self
pub fn new(n_features_to_select: usize, direction: Direction) -> Self
Create a new SequentialFeatureSelector.
§Parameters
n_features_to_select— how many features to keep.direction—Direction::ForwardorDirection::Backward.
Sourcepub fn n_features_to_select(&self) -> usize
pub fn n_features_to_select(&self) -> usize
Return the number of features to select.
Sourcepub fn fit<F: Float + Send + Sync + 'static>(
&self,
x: &Array2<F>,
y: &Array1<F>,
score_fn: impl Fn(&Array2<F>, &Array1<F>) -> Result<F, FerroError>,
) -> Result<FittedSequentialFeatureSelector<F>, FerroError>
pub fn fit<F: Float + Send + Sync + 'static>( &self, x: &Array2<F>, y: &Array1<F>, score_fn: impl Fn(&Array2<F>, &Array1<F>) -> Result<F, FerroError>, ) -> Result<FittedSequentialFeatureSelector<F>, FerroError>
Fit the selector by evaluating feature subsets with a scoring function.
§Parameters
x— the feature matrix (n_samples x n_features).y— the target vector (n_samples).score_fn— a callback(&Array2<F>, &Array1<F>) -> Result<F, FerroError>that evaluates the quality of a feature subset.
§Errors
FerroError::InvalidParameterifn_features_to_selectis zero or exceeds the number of features.FerroError::ShapeMismatchifxandyhave mismatched lengths.- Propagates errors from
score_fn.
Trait Implementations§
Source§impl Clone for SequentialFeatureSelector
impl Clone for SequentialFeatureSelector
Source§fn clone(&self) -> SequentialFeatureSelector
fn clone(&self) -> SequentialFeatureSelector
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 moreAuto Trait Implementations§
impl Freeze for SequentialFeatureSelector
impl RefUnwindSafe for SequentialFeatureSelector
impl Send for SequentialFeatureSelector
impl Sync for SequentialFeatureSelector
impl Unpin for SequentialFeatureSelector
impl UnsafeUnpin for SequentialFeatureSelector
impl UnwindSafe for SequentialFeatureSelector
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 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.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§unsafe fn to_subset_unchecked(&self) -> SS
unsafe 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.