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

Commit 4352c26

Browse files
committed
split test module
1 parent b0c01f7 commit 4352c26

File tree

1 file changed

+74
-67
lines changed

1 file changed

+74
-67
lines changed

src/learning/tree.rs

Lines changed: 74 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,80 @@ 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+
use linalg::Vector;
409355

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-
}
356+
use super::{uniquify, get_splits, split_slice, xlogy, freq, Metrics};
415357

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

0 commit comments

Comments
 (0)