(feature_names: &[String], values: &[Vec<f64>])
| 351 | } |
| 352 | |
| 353 | fn pack_stats(feature_names: &[String], values: &[Vec<f64>]) -> BTreeMap<String, ImportanceStats> { |
| 354 | let mut out = BTreeMap::new(); |
| 355 | for (j, name) in feature_names.iter().enumerate() { |
| 356 | let (m, s) = mean_std(&values[j]); |
| 357 | let mean = if m.is_finite() { m } else { 0.0 }; |
| 358 | let std = if s.is_finite() { s * (values[j].len() as f64).powf(-0.5) } else { 0.0 }; |
| 359 | out.insert(name.clone(), ImportanceStats { mean, std }); |
| 360 | } |
| 361 | out |
| 362 | } |
| 363 | |
| 364 | fn nan_mean_std(v: &[f64]) -> (f64, f64) { |
| 365 | let vals: Vec<f64> = v.iter().copied().filter(|x| x.is_finite()).collect(); |
no test coverage detected