Skip to content

Commit 2650416

Browse files
authored
1 parent f0b348d commit 2650416

File tree

2 files changed

+78
-0
lines changed

2 files changed

+78
-0
lines changed

Cargo.toml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,3 +36,8 @@ bincode = "1.3.1"
3636
[[bench]]
3737
name = "distance"
3838
harness = false
39+
40+
[[bench]]
41+
name = "naive_bayes"
42+
harness = false
43+
required-features = ["ndarray-bindings", "nalgebra-bindings"]

benches/naive_bayes.rs

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
use criterion::BenchmarkId;
2+
use criterion::{black_box, criterion_group, criterion_main, Criterion};
3+
4+
use nalgebra::DMatrix;
5+
use ndarray::Array2;
6+
use smartcore::linalg::naive::dense_matrix::DenseMatrix;
7+
use smartcore::linalg::BaseMatrix;
8+
use smartcore::linalg::BaseVector;
9+
use smartcore::naive_bayes::GaussianNB;
10+
11+
pub fn gaussian_naive_bayes_fit_benchmark(c: &mut Criterion) {
12+
let mut group = c.benchmark_group("GaussianNB::fit");
13+
14+
for n_samples in [100_usize, 1000_usize, 10000_usize].iter() {
15+
for n_features in [10_usize, 100_usize, 1000_usize].iter() {
16+
let x = DenseMatrix::<f64>::rand(*n_samples, *n_features);
17+
let y: Vec<f64> = (0..*n_samples)
18+
.map(|i| (i % *n_samples / 5_usize) as f64)
19+
.collect::<Vec<f64>>();
20+
group.bench_with_input(
21+
BenchmarkId::from_parameter(format!(
22+
"n_samples: {}, n_features: {}",
23+
n_samples, n_features
24+
)),
25+
n_samples,
26+
|b, _| {
27+
b.iter(|| {
28+
GaussianNB::fit(black_box(&x), black_box(&y), Default::default()).unwrap();
29+
})
30+
},
31+
);
32+
}
33+
}
34+
group.finish();
35+
}
36+
37+
pub fn gaussian_naive_matrix_datastructure(c: &mut Criterion) {
38+
let mut group = c.benchmark_group("GaussianNB");
39+
let classes = (0..10000).map(|i| (i % 25) as f64).collect::<Vec<f64>>();
40+
41+
group.bench_function("DenseMatrix", |b| {
42+
let x = DenseMatrix::<f64>::rand(10000, 500);
43+
let y = <DenseMatrix<f64> as BaseMatrix<f64>>::RowVector::from_array(&classes);
44+
45+
b.iter(|| {
46+
GaussianNB::fit(black_box(&x), black_box(&y), Default::default()).unwrap();
47+
})
48+
});
49+
50+
group.bench_function("ndarray", |b| {
51+
let x = Array2::<f64>::rand(10000, 500);
52+
let y = <Array2<f64> as BaseMatrix<f64>>::RowVector::from_array(&classes);
53+
54+
b.iter(|| {
55+
GaussianNB::fit(black_box(&x), black_box(&y), Default::default()).unwrap();
56+
})
57+
});
58+
59+
group.bench_function("ndalgebra", |b| {
60+
let x = DMatrix::<f64>::rand(10000, 500);
61+
let y = <DMatrix<f64> as BaseMatrix<f64>>::RowVector::from_array(&classes);
62+
63+
b.iter(|| {
64+
GaussianNB::fit(black_box(&x), black_box(&y), Default::default()).unwrap();
65+
})
66+
});
67+
}
68+
criterion_group!(
69+
benches,
70+
gaussian_naive_bayes_fit_benchmark,
71+
gaussian_naive_matrix_datastructure
72+
);
73+
criterion_main!(benches);

0 commit comments

Comments
 (0)