linfa_reduction/random_projection/
mod.rs1mod algorithms;
27mod common;
28mod hyperparams;
29mod methods;
30
31pub use algorithms::RandomProjection;
32pub use hyperparams::{RandomProjectionParams, RandomProjectionValidParams};
33
34use self::methods::{Gaussian, Sparse};
35
36pub type GaussianRandomProjection<F> = RandomProjection<Gaussian, F>;
37pub type GaussianRandomProjectionParams<R> = RandomProjectionParams<Gaussian, R>;
38pub type GaussianRandomProjectionValidParams<R> = RandomProjectionValidParams<Gaussian, R>;
39pub type SparseRandomProjection<F> = RandomProjection<Sparse, F>;
40pub type SparseRandomProjectionParams<R> = RandomProjectionParams<Sparse, R>;
41pub type SparseRandomProjectionValidParams<R> = RandomProjectionValidParams<Sparse, R>;
42
43#[cfg(test)]
44mod tests {
45 use super::*;
46
47 use rand_xoshiro::Xoshiro256Plus;
48
49 #[test]
50 fn autotraits_gaussian() {
51 fn has_autotraits<T: Send + Sync + Sized + Unpin>() {}
52 has_autotraits::<GaussianRandomProjection<f64>>();
53 has_autotraits::<GaussianRandomProjection<f32>>();
54 has_autotraits::<GaussianRandomProjectionValidParams<Xoshiro256Plus>>();
55 has_autotraits::<GaussianRandomProjectionParams<Xoshiro256Plus>>();
56 }
57
58 #[test]
59 fn autotraits_sparse() {
60 fn has_autotraits<T: Send + Sync + Sized + Unpin>() {}
61 has_autotraits::<SparseRandomProjection<f64>>();
62 has_autotraits::<SparseRandomProjection<f32>>();
63 has_autotraits::<SparseRandomProjectionValidParams<Xoshiro256Plus>>();
64 has_autotraits::<SparseRandomProjectionParams<Xoshiro256Plus>>();
65 }
66
67 use linfa::{traits::Fit, Dataset};
68
69 #[test]
70 fn gaussian_dim_increase_error() {
71 let records = array![[10., 10.], [1., 12.], [20., 30.], [-20., 30.],];
72 let dataset = Dataset::from(records);
73 let res = GaussianRandomProjection::<f32>::params()
74 .target_dim(10)
75 .fit(&dataset);
76 assert!(res.is_err())
77 }
78 #[test]
79 fn sparse_dim_increase_error() {
80 let records = array![[10., 10.], [1., 12.], [20., 30.], [-20., 30.],];
81 let dataset = Dataset::from(records);
82 let res = SparseRandomProjection::<f32>::params()
83 .target_dim(10)
84 .fit(&dataset);
85 assert!(res.is_err())
86 }
87}