Skip to main content

sklears_feature_selection/genetic_optimization/
featureimportanceobjective_traits.rs

1//! # FeatureImportanceObjective - Trait Implementations
2//!
3//! This module contains trait implementations for `FeatureImportanceObjective`.
4//!
5//! ## Implemented Traits
6//!
7//! - `ObjectiveFunction`
8//!
9//! 🤖 Generated with [SplitRS](https://github.com/cool-japan/splitrs)
10
11use super::functions::*;
12use super::types::*;
13use scirs2_core::ndarray::{Array1, Array2};
14use sklears_core::error::Result as SklResult;
15
16impl ObjectiveFunction for FeatureImportanceObjective {
17    fn evaluate(
18        &self,
19        _x: &Array2<f64>,
20        _y_classif: Option<&Array1<i32>>,
21        _y_regression: Option<&Array1<f64>>,
22        feature_mask: &[bool],
23    ) -> SklResult<f64> {
24        let total_importance: f64 = feature_mask
25            .iter()
26            .enumerate()
27            .filter_map(|(i, &selected)| {
28                if selected {
29                    Some(self.importance_scores[i])
30                } else {
31                    None
32                }
33            })
34            .sum();
35        let max_possible: f64 = self.importance_scores.iter().sum();
36        Ok(total_importance / max_possible)
37    }
38    fn name(&self) -> &str {
39        "feature_importance"
40    }
41    fn clone_box(&self) -> Box<dyn ObjectiveFunction> {
42        Box::new(self.clone())
43    }
44}