sklears_feature_selection/genetic_optimization/
featureimportanceobjective_traits.rs1use 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}