Skip to content
This repository was archived by the owner on Jul 16, 2021. It is now read-only.

Commit 9affa1a

Browse files
committed
split test module
1 parent b0c01f7 commit 9affa1a

1 file changed

Lines changed: 70 additions & 67 deletions

File tree

src/learning/tree.rs

Lines changed: 70 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,6 @@ pub struct DecisionTreeClassifier {
6464
max_depth: Option<usize>,
6565
min_samples_split: Option<usize>,
6666

67-
6867
// params set after train
6968
n_classes: usize,
7069
n_features: usize,
@@ -265,12 +264,6 @@ fn uniquify(values: &Vec<f64>) -> Vec<f64> {
265264
values
266265
}
267266

268-
#[test]
269-
fn test_uniquify() {
270-
assert_eq!(uniquify(&vec![0.1, 0.2, 0.1]), vec![0.1, 0.2]);
271-
assert_eq!(uniquify(&vec![0.3, 0.1, 0.1, 0.1, 0.2, 0.2]), vec![0.1, 0.2, 0.3]);
272-
}
273-
274267
/// Uniquify values, then get splitter values, i.e. midpoints of unique values
275268
fn get_splits(values: &Vec<f64>) -> Vec<f64> {
276269
let uniques = uniquify(values);
@@ -280,13 +273,6 @@ fn get_splits(values: &Vec<f64>) -> Vec<f64> {
280273
.collect()
281274
}
282275

283-
#[test]
284-
fn test_get_splits() {
285-
assert_eq!(get_splits(&vec![0.1, 0.2, 0.1]), vec![0.15000000000000002]);
286-
assert_eq!(get_splits(&vec![0.3, 0.1, 0.1, 0.1, 0.2, 0.2]), vec![0.15000000000000002, 0.25]);
287-
assert_eq!(get_splits(&vec![1., 3., 7., 3., 7.]), vec![2., 5.]);
288-
}
289-
290276
/// Split Vec to left and right, depending on given bool Vec values
291277
fn split_slice<T: Copy>(values: &Vector<T>, bindexer: &Vec<bool>) -> (Vector<T>, Vector<T>) {
292278
let mut left: Vec<T> = Vec::with_capacity(values.size());
@@ -303,17 +289,6 @@ fn split_slice<T: Copy>(values: &Vector<T>, bindexer: &Vec<bool>) -> (Vector<T>,
303289
(Vector::new(left), Vector::new(right))
304290
}
305291

306-
#[test]
307-
fn test_split_slice() {
308-
let (l, r) = split_slice(&Vector::new(vec![1, 2, 3]), &vec![true, false, true]);
309-
assert_eq!(l, Vector::new(vec![1, 3]));
310-
assert_eq!(r, Vector::new(vec![2]));
311-
312-
let (l, r) = split_slice(&Vector::new(vec![1, 2, 3]), &vec![true, true, true]);
313-
assert_eq!(l, Vector::new(vec![1, 2, 3]));
314-
assert_eq!(r, Vector::new(vec![]));
315-
}
316-
317292
fn xlogy(x: f64, y: f64) -> f64 {
318293
if x == 0. {
319294
0.
@@ -322,12 +297,6 @@ fn xlogy(x: f64, y: f64) -> f64 {
322297
}
323298
}
324299

325-
#[test]
326-
fn test_xlogy() {
327-
assert_eq!(xlogy(3., 8.), 6.2383246250395068);
328-
assert_eq!(xlogy(0., 100.), 0.);
329-
}
330-
331300
/// Count target label frequencies
332301
fn freq(labels: &Vector<usize>) -> (Vector<usize>, Vector<usize>) {
333302
let mut map: BTreeMap<usize, usize> = BTreeMap::new();
@@ -345,17 +314,6 @@ fn freq(labels: &Vector<usize>) -> (Vector<usize>, Vector<usize>) {
345314
(Vector::new(uniques), Vector::new(counts))
346315
}
347316

348-
#[test]
349-
fn test_freq() {
350-
let (uniques, counts) = freq(&Vector::new(vec![1, 2, 3, 1, 2, 4]));
351-
assert_eq!(uniques, Vector::new(vec![1, 2, 3, 4]));
352-
assert_eq!(counts, Vector::new(vec![2, 2, 1, 1]));
353-
354-
let (uniques, counts) = freq(&Vector::new(vec![1, 2, 2, 2, 2]));
355-
assert_eq!(uniques, Vector::new(vec![1, 2]));
356-
assert_eq!(counts, Vector::new(vec![1, 4]));
357-
}
358-
359317
/// Split criterias
360318
#[derive(Debug)]
361319
pub enum Metrics {
@@ -390,31 +348,76 @@ impl Metrics {
390348
}
391349
}
392350

393-
#[test]
394-
fn test_entropy() {
395-
assert_eq!(Metrics::Entropy.from_probas(&vec![1.]), 0.);
396-
assert_eq!(Metrics::Entropy.from_probas(&vec![1., 0., 0.]), 0.);
397-
assert_eq!(Metrics::Entropy.from_probas(&vec![0.5, 0.5]), 0.69314718055994529);
398-
assert_eq!(Metrics::Entropy.from_probas(&vec![1. / 3., 1. / 3., 1. / 3.]), 1.0986122886681096);
399-
assert_eq!(Metrics::Entropy.from_probas(&vec![0.4, 0.3, 0.3]), 1.0888999753452238);
400-
}
351+
#[cfg(test)]
352+
mod tests {
401353

402-
#[test]
403-
fn test_gini_from_probas() {
404-
assert_eq!(Metrics::Gini.from_probas(&vec![1., 0., 0.]), 0.);
405-
assert_eq!(Metrics::Gini.from_probas(&vec![1. / 3., 1. / 3., 1. / 3.]), 0.6666666666666667);
406-
assert_eq!(Metrics::Gini.from_probas(&vec![0., 1. / 46., 45. / 46.]), 0.04253308128544431);
407-
assert_eq!(Metrics::Gini.from_probas(&vec![0., 49. / 54., 5. / 54.]), 0.16803840877914955);
408-
}
354+
#[test]
355+
fn test_uniquify() {
356+
assert_eq!(uniquify(&vec![0.1, 0.2, 0.1]), vec![0.1, 0.2]);
357+
assert_eq!(uniquify(&vec![0.3, 0.1, 0.1, 0.1, 0.2, 0.2]), vec![0.1, 0.2, 0.3]);
358+
}
409359

410-
#[test]
411-
fn test_entropy_from_labels() {
412-
assert_eq!(Metrics::Entropy.from_labels(&Vector::new(vec![1, 2, 3])), 1.0986122886681096);
413-
assert_eq!(Metrics::Entropy.from_labels(&Vector::new(vec![1, 1, 2, 2])), 0.69314718055994529);
414-
}
360+
#[test]
361+
fn test_get_splits() {
362+
assert_eq!(get_splits(&vec![0.1, 0.2, 0.1]), vec![0.15000000000000002]);
363+
assert_eq!(get_splits(&vec![0.3, 0.1, 0.1, 0.1, 0.2, 0.2]), vec![0.15000000000000002, 0.25]);
364+
assert_eq!(get_splits(&vec![1., 3., 7., 3., 7.]), vec![2., 5.]);
365+
}
415366

416-
#[test]
417-
fn test_gini_from_labels() {
418-
assert_eq!(Metrics::Gini.from_labels(&Vector::new(vec![1, 1, 1])), 0.);
419-
assert_eq!(Metrics::Gini.from_labels(&Vector::new(vec![1, 1, 2, 2, 3, 3])), 0.6666666666666667);
420-
}
367+
#[test]
368+
fn test_split_slice() {
369+
let (l, r) = split_slice(&Vector::new(vec![1, 2, 3]), &vec![true, false, true]);
370+
assert_eq!(l, Vector::new(vec![1, 3]));
371+
assert_eq!(r, Vector::new(vec![2]));
372+
373+
let (l, r) = split_slice(&Vector::new(vec![1, 2, 3]), &vec![true, true, true]);
374+
assert_eq!(l, Vector::new(vec![1, 2, 3]));
375+
assert_eq!(r, Vector::new(vec![]));
376+
}
377+
378+
#[test]
379+
fn test_xlogy() {
380+
assert_eq!(xlogy(3., 8.), 6.2383246250395068);
381+
assert_eq!(xlogy(0., 100.), 0.);
382+
}
383+
384+
#[test]
385+
fn test_freq() {
386+
let (uniques, counts) = freq(&Vector::new(vec![1, 2, 3, 1, 2, 4]));
387+
assert_eq!(uniques, Vector::new(vec![1, 2, 3, 4]));
388+
assert_eq!(counts, Vector::new(vec![2, 2, 1, 1]));
389+
390+
let (uniques, counts) = freq(&Vector::new(vec![1, 2, 2, 2, 2]));
391+
assert_eq!(uniques, Vector::new(vec![1, 2]));
392+
assert_eq!(counts, Vector::new(vec![1, 4]));
393+
}
394+
395+
#[test]
396+
fn test_entropy() {
397+
assert_eq!(Metrics::Entropy.from_probas(&vec![1.]), 0.);
398+
assert_eq!(Metrics::Entropy.from_probas(&vec![1., 0., 0.]), 0.);
399+
assert_eq!(Metrics::Entropy.from_probas(&vec![0.5, 0.5]), 0.69314718055994529);
400+
assert_eq!(Metrics::Entropy.from_probas(&vec![1. / 3., 1. / 3., 1. / 3.]), 1.0986122886681096);
401+
assert_eq!(Metrics::Entropy.from_probas(&vec![0.4, 0.3, 0.3]), 1.0888999753452238);
402+
}
403+
404+
#[test]
405+
fn test_gini_from_probas() {
406+
assert_eq!(Metrics::Gini.from_probas(&vec![1., 0., 0.]), 0.);
407+
assert_eq!(Metrics::Gini.from_probas(&vec![1. / 3., 1. / 3., 1. / 3.]), 0.6666666666666667);
408+
assert_eq!(Metrics::Gini.from_probas(&vec![0., 1. / 46., 45. / 46.]), 0.04253308128544431);
409+
assert_eq!(Metrics::Gini.from_probas(&vec![0., 49. / 54., 5. / 54.]), 0.16803840877914955);
410+
}
411+
412+
#[test]
413+
fn test_entropy_from_labels() {
414+
assert_eq!(Metrics::Entropy.from_labels(&Vector::new(vec![1, 2, 3])), 1.0986122886681096);
415+
assert_eq!(Metrics::Entropy.from_labels(&Vector::new(vec![1, 1, 2, 2])), 0.69314718055994529);
416+
}
417+
418+
#[test]
419+
fn test_gini_from_labels() {
420+
assert_eq!(Metrics::Gini.from_labels(&Vector::new(vec![1, 1, 1])), 0.);
421+
assert_eq!(Metrics::Gini.from_labels(&Vector::new(vec![1, 1, 2, 2, 3, 3])), 0.6666666666666667);
422+
}
423+
}

0 commit comments

Comments
 (0)