feat: puts ndarray and nalgebra bindings behind feature flags

This commit is contained in:
Volodymyr Orlov
2020-08-28 16:55:41 -07:00
parent 367ea62608
commit 68dca25f91
8 changed files with 173 additions and 125 deletions
+91 -1
View File
@@ -336,7 +336,9 @@ impl<T: FloatExt + ScalarOperand + AddAssign + SubAssign + MulAssign + DivAssign
#[cfg(test)]
mod tests {
use super::*;
use ndarray::{arr1, arr2, Array2};
use crate::ensemble::random_forest_regressor::*;
use crate::linear::logistic_regression::*;
use ndarray::{arr1, arr2, Array1, Array2};
#[test]
fn vec_get_set() {
@@ -654,4 +656,92 @@ mod tests {
a.abs_mut();
assert_eq!(a, expected);
}
#[test]
fn lr_fit_predict_iris() {
let x = arr2(&[
[5.1, 3.5, 1.4, 0.2],
[4.9, 3.0, 1.4, 0.2],
[4.7, 3.2, 1.3, 0.2],
[4.6, 3.1, 1.5, 0.2],
[5.0, 3.6, 1.4, 0.2],
[5.4, 3.9, 1.7, 0.4],
[4.6, 3.4, 1.4, 0.3],
[5.0, 3.4, 1.5, 0.2],
[4.4, 2.9, 1.4, 0.2],
[4.9, 3.1, 1.5, 0.1],
[7.0, 3.2, 4.7, 1.4],
[6.4, 3.2, 4.5, 1.5],
[6.9, 3.1, 4.9, 1.5],
[5.5, 2.3, 4.0, 1.3],
[6.5, 2.8, 4.6, 1.5],
[5.7, 2.8, 4.5, 1.3],
[6.3, 3.3, 4.7, 1.6],
[4.9, 2.4, 3.3, 1.0],
[6.6, 2.9, 4.6, 1.3],
[5.2, 2.7, 3.9, 1.4],
]);
let y: Array1<f64> = arr1(&[
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,
]);
let lr = LogisticRegression::fit(&x, &y);
let y_hat = lr.predict(&x);
let error: f64 = y
.into_iter()
.zip(y_hat.into_iter())
.map(|(&a, &b)| (a - b).abs())
.sum();
assert!(error <= 1.0);
}
#[test]
fn my_fit_longley_ndarray() {
let x = arr2(&[
[234.289, 235.6, 159., 107.608, 1947., 60.323],
[259.426, 232.5, 145.6, 108.632, 1948., 61.122],
[258.054, 368.2, 161.6, 109.773, 1949., 60.171],
[284.599, 335.1, 165., 110.929, 1950., 61.187],
[328.975, 209.9, 309.9, 112.075, 1951., 63.221],
[346.999, 193.2, 359.4, 113.27, 1952., 63.639],
[365.385, 187., 354.7, 115.094, 1953., 64.989],
[363.112, 357.8, 335., 116.219, 1954., 63.761],
[397.469, 290.4, 304.8, 117.388, 1955., 66.019],
[419.18, 282.2, 285.7, 118.734, 1956., 67.857],
[442.769, 293.6, 279.8, 120.445, 1957., 68.169],
[444.546, 468.1, 263.7, 121.95, 1958., 66.513],
[482.704, 381.3, 255.2, 123.366, 1959., 68.655],
[502.601, 393.1, 251.4, 125.368, 1960., 69.564],
[518.173, 480.6, 257.2, 127.852, 1961., 69.331],
[554.894, 400.7, 282.7, 130.081, 1962., 70.551],
]);
let y = arr1(&[
83.0, 88.5, 88.2, 89.5, 96.2, 98.1, 99.0, 100.0, 101.2, 104.6, 108.4, 110.8, 112.6,
114.2, 115.7, 116.9,
]);
let expected_y: Vec<f64> = vec![
85., 88., 88., 89., 97., 98., 99., 99., 102., 104., 109., 110., 113., 114., 115., 116.,
];
let y_hat = RandomForestRegressor::fit(
&x,
&y,
RandomForestRegressorParameters {
max_depth: None,
min_samples_leaf: 1,
min_samples_split: 2,
n_trees: 1000,
mtry: Option::None,
},
)
.predict(&x);
for i in 0..y_hat.len() {
assert!((y_hat[i] - expected_y[i]).abs() < 1.0);
}
}
}