dtrees_rs/algorithms/common/
errors.rs1pub trait ErrorWrapper: Send + Sync {
5 fn compute(&self, data: &[usize]) -> (f64, f64);
8}
9
10#[derive(Debug, Clone)]
12pub struct NativeError {
13 function: fn(&[usize]) -> (f64, f64),
14}
15
16impl NativeError {
17 pub fn new(function: fn(&[usize]) -> (f64, f64)) -> Self {
19 NativeError { function }
20 }
21}
22
23impl Default for NativeError {
24 fn default() -> Self {
25 Self::new(classification_error)
26 }
27}
28
29impl ErrorWrapper for NativeError {
30 fn compute(&self, data: &[usize]) -> (f64, f64) {
31 (self.function)(data)
32 }
33}
34
35pub fn classification_error(classes_support: &[usize]) -> (f64, f64) {
38 let mut max_idx = 0;
39 let mut max_value = 0;
40 let mut total = 0;
41 for (idx, value) in classes_support.iter().enumerate() {
42 total += value;
43 if *value >= max_value {
44 max_value = *value;
45 max_idx = idx;
46 }
47 }
48 let error = total - max_value;
49 (error as f64, max_idx as f64)
50}