Patch to version 0.4.0 (#257)
* uncomment test * Add random test for logistic regression * linting * Bump version * Add test for logistic regression * linting * initial commit * final * final-clean * Bump to 0.4.0 * Fix linter * cleanup * Update CHANDELOG with breaking changes * Update CHANDELOG date * Add functional methods to DenseMatrix implementation * linting * add type declaration in test * Fix Wasm tests failing * linting * fix tests * linting * Add type annotations on BBDTree constructor * fix clippy * fix clippy * fix tests * bump version * run fmt. fix changelog --------- Co-authored-by: Edmund Cape <edmund@Edmunds-MacBook-Pro.local>
This commit is contained in:
@@ -12,7 +12,8 @@
|
||||
//! pub struct BGSolver {}
|
||||
//! impl<'a, T: FloatNumber, X: Array2<T>> BiconjugateGradientSolver<'a, T, X> for BGSolver {}
|
||||
//!
|
||||
//! let a = DenseMatrix::from_2d_array(&[&[25., 15., -5.], &[15., 18., 0.], &[-5., 0., 11.]]);
|
||||
//! let a = DenseMatrix::from_2d_array(&[&[25., 15., -5.], &[15., 18., 0.], &[-5., 0.,
|
||||
//! 11.]]).unwrap();
|
||||
//! let b = vec![40., 51., 28.];
|
||||
//! let expected = vec![1.0, 2.0, 3.0];
|
||||
//! let mut x = Vec::zeros(3);
|
||||
@@ -158,7 +159,8 @@ mod tests {
|
||||
|
||||
#[test]
|
||||
fn bg_solver() {
|
||||
let a = DenseMatrix::from_2d_array(&[&[25., 15., -5.], &[15., 18., 0.], &[-5., 0., 11.]]);
|
||||
let a = DenseMatrix::from_2d_array(&[&[25., 15., -5.], &[15., 18., 0.], &[-5., 0., 11.]])
|
||||
.unwrap();
|
||||
let b = vec![40., 51., 28.];
|
||||
let expected = [1.0, 2.0, 3.0];
|
||||
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
//! &[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],
|
||||
//! ]);
|
||||
//! ]).unwrap();
|
||||
//!
|
||||
//! let y: Vec<f64> = vec![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];
|
||||
@@ -511,7 +511,8 @@ mod tests {
|
||||
&[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],
|
||||
]);
|
||||
])
|
||||
.unwrap();
|
||||
|
||||
let y: Vec<f64> = vec![
|
||||
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,
|
||||
@@ -562,7 +563,8 @@ mod tests {
|
||||
&[17.0, 1918.0, 1.4054969025700674],
|
||||
&[18.0, 1929.0, 1.3271699396384906],
|
||||
&[19.0, 1915.0, 1.1373332337674806],
|
||||
]);
|
||||
])
|
||||
.unwrap();
|
||||
|
||||
let y: Vec<f64> = vec![
|
||||
1.48, 2.72, 4.52, 5.72, 5.25, 4.07, 3.75, 4.75, 6.77, 4.72, 6.78, 6.79, 8.3, 7.42,
|
||||
@@ -627,7 +629,7 @@ mod tests {
|
||||
// &[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],
|
||||
// ]);
|
||||
// ]).unwrap();
|
||||
|
||||
// let y = vec![
|
||||
// 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,
|
||||
|
||||
+2
-1
@@ -418,7 +418,8 @@ mod tests {
|
||||
&[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],
|
||||
]);
|
||||
])
|
||||
.unwrap();
|
||||
|
||||
let y: Vec<f64> = vec![
|
||||
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,
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
//! &[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],
|
||||
//! ]);
|
||||
//! ]).unwrap();
|
||||
//!
|
||||
//! let y: Vec<f64> = vec![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];
|
||||
@@ -341,7 +341,8 @@ mod tests {
|
||||
&[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],
|
||||
]);
|
||||
])
|
||||
.unwrap();
|
||||
|
||||
let y: Vec<f64> = vec![
|
||||
83.0, 88.5, 88.2, 89.5, 96.2, 98.1, 99.0, 100.0, 101.2, 104.6, 108.4, 110.8,
|
||||
@@ -393,7 +394,7 @@ mod tests {
|
||||
// &[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],
|
||||
// ]);
|
||||
// ]).unwrap();
|
||||
|
||||
// let y = vec![
|
||||
// 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,
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
//! &[4.9, 2.4, 3.3, 1.0],
|
||||
//! &[6.6, 2.9, 4.6, 1.3],
|
||||
//! &[5.2, 2.7, 3.9, 1.4],
|
||||
//! ]);
|
||||
//! ]).unwrap();
|
||||
//! let y: Vec<i32> = vec![
|
||||
//! 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
//! ];
|
||||
@@ -416,7 +416,7 @@ impl<TX: Number + FloatNumber + RealNumber, TY: Number + Ord, X: Array2<TX>, Y:
|
||||
/// Fits Logistic Regression to your data.
|
||||
/// * `x` - _NxM_ matrix with _N_ observations and _M_ features in each observation.
|
||||
/// * `y` - target class values
|
||||
/// * `parameters` - other parameters, use `Default::default()` to set parameters to default values.
|
||||
/// * `parameters` - other parameters, use `Default::default()` to set parameters to default values.
|
||||
pub fn fit(
|
||||
x: &X,
|
||||
y: &Y,
|
||||
@@ -611,7 +611,8 @@ mod tests {
|
||||
&[10., -2.],
|
||||
&[8., 2.],
|
||||
&[9., 0.],
|
||||
]);
|
||||
])
|
||||
.unwrap();
|
||||
|
||||
let y = vec![0, 0, 1, 1, 2, 1, 1, 0, 0, 2, 1, 1, 0, 0, 1];
|
||||
|
||||
@@ -671,7 +672,8 @@ mod tests {
|
||||
&[10., -2.],
|
||||
&[8., 2.],
|
||||
&[9., 0.],
|
||||
]);
|
||||
])
|
||||
.unwrap();
|
||||
|
||||
let y = vec![0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1];
|
||||
|
||||
@@ -733,7 +735,8 @@ mod tests {
|
||||
&[10., -2.],
|
||||
&[8., 2.],
|
||||
&[9., 0.],
|
||||
]);
|
||||
])
|
||||
.unwrap();
|
||||
let y: Vec<i32> = vec![0, 0, 1, 1, 2, 1, 1, 0, 0, 2, 1, 1, 0, 0, 1];
|
||||
|
||||
let lr = LogisticRegression::fit(&x, &y, Default::default()).unwrap();
|
||||
@@ -818,37 +821,41 @@ mod tests {
|
||||
assert!(reg_coeff_sum < coeff);
|
||||
}
|
||||
|
||||
// TODO: serialization for the new DenseMatrix needs to be implemented
|
||||
// #[cfg_attr(all(target_arch = "wasm32", not(target_os = "wasi")), wasm_bindgen_test::wasm_bindgen_test)]
|
||||
// #[test]
|
||||
// #[cfg(feature = "serde")]
|
||||
// fn serde() {
|
||||
// let x = DenseMatrix::from_2d_array(&[
|
||||
// &[1., -5.],
|
||||
// &[2., 5.],
|
||||
// &[3., -2.],
|
||||
// &[1., 2.],
|
||||
// &[2., 0.],
|
||||
// &[6., -5.],
|
||||
// &[7., 5.],
|
||||
// &[6., -2.],
|
||||
// &[7., 2.],
|
||||
// &[6., 0.],
|
||||
// &[8., -5.],
|
||||
// &[9., 5.],
|
||||
// &[10., -2.],
|
||||
// &[8., 2.],
|
||||
// &[9., 0.],
|
||||
// ]);
|
||||
// let y: Vec<i32> = vec![0, 0, 1, 1, 2, 1, 1, 0, 0, 2, 1, 1, 0, 0, 1];
|
||||
//TODO: serialization for the new DenseMatrix needs to be implemented
|
||||
#[cfg_attr(
|
||||
all(target_arch = "wasm32", not(target_os = "wasi")),
|
||||
wasm_bindgen_test::wasm_bindgen_test
|
||||
)]
|
||||
#[test]
|
||||
#[cfg(feature = "serde")]
|
||||
fn serde() {
|
||||
let x: DenseMatrix<f64> = DenseMatrix::from_2d_array(&[
|
||||
&[1., -5.],
|
||||
&[2., 5.],
|
||||
&[3., -2.],
|
||||
&[1., 2.],
|
||||
&[2., 0.],
|
||||
&[6., -5.],
|
||||
&[7., 5.],
|
||||
&[6., -2.],
|
||||
&[7., 2.],
|
||||
&[6., 0.],
|
||||
&[8., -5.],
|
||||
&[9., 5.],
|
||||
&[10., -2.],
|
||||
&[8., 2.],
|
||||
&[9., 0.],
|
||||
])
|
||||
.unwrap();
|
||||
let y: Vec<i32> = vec![0, 0, 1, 1, 2, 1, 1, 0, 0, 2, 1, 1, 0, 0, 1];
|
||||
|
||||
// let lr = LogisticRegression::fit(&x, &y, Default::default()).unwrap();
|
||||
let lr = LogisticRegression::fit(&x, &y, Default::default()).unwrap();
|
||||
|
||||
// let deserialized_lr: LogisticRegression<f64, i32, DenseMatrix<f64>, Vec<i32>> =
|
||||
// serde_json::from_str(&serde_json::to_string(&lr).unwrap()).unwrap();
|
||||
let deserialized_lr: LogisticRegression<f64, i32, DenseMatrix<f64>, Vec<i32>> =
|
||||
serde_json::from_str(&serde_json::to_string(&lr).unwrap()).unwrap();
|
||||
|
||||
// assert_eq!(lr, deserialized_lr);
|
||||
// }
|
||||
assert_eq!(lr, deserialized_lr);
|
||||
}
|
||||
|
||||
#[cfg_attr(
|
||||
all(target_arch = "wasm32", not(target_os = "wasi")),
|
||||
@@ -877,7 +884,8 @@ mod tests {
|
||||
&[4.9, 2.4, 3.3, 1.0],
|
||||
&[6.6, 2.9, 4.6, 1.3],
|
||||
&[5.2, 2.7, 3.9, 1.4],
|
||||
]);
|
||||
])
|
||||
.unwrap();
|
||||
let y: Vec<i32> = vec![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, Default::default()).unwrap();
|
||||
@@ -899,4 +907,46 @@ mod tests {
|
||||
|
||||
assert!(reg_coeff_sum < coeff);
|
||||
}
|
||||
#[cfg_attr(
|
||||
all(target_arch = "wasm32", not(target_os = "wasi")),
|
||||
wasm_bindgen_test::wasm_bindgen_test
|
||||
)]
|
||||
#[test]
|
||||
fn lr_fit_predict_random() {
|
||||
let x: DenseMatrix<f32> = DenseMatrix::rand(52181, 94);
|
||||
let y1: Vec<i32> = vec![1; 2181];
|
||||
let y2: Vec<i32> = vec![0; 50000];
|
||||
let y: Vec<i32> = y1.into_iter().chain(y2.into_iter()).collect();
|
||||
|
||||
let lr = LogisticRegression::fit(&x, &y, Default::default()).unwrap();
|
||||
let lr_reg = LogisticRegression::fit(
|
||||
&x,
|
||||
&y,
|
||||
LogisticRegressionParameters::default().with_alpha(1.0),
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
let y_hat = lr.predict(&x).unwrap();
|
||||
let y_hat_reg = lr_reg.predict(&x).unwrap();
|
||||
|
||||
assert_eq!(y.len(), y_hat.len());
|
||||
assert_eq!(y.len(), y_hat_reg.len());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_logit() {
|
||||
let x: &DenseMatrix<f64> = &DenseMatrix::rand(52181, 94);
|
||||
let y1: Vec<u32> = vec![1; 2181];
|
||||
let y2: Vec<u32> = vec![0; 50000];
|
||||
let y: &Vec<u32> = &(y1.into_iter().chain(y2.into_iter()).collect());
|
||||
println!("y vec height: {:?}", y.len());
|
||||
println!("x matrix shape: {:?}", x.shape());
|
||||
|
||||
let lr = LogisticRegression::fit(x, y, Default::default()).unwrap();
|
||||
let y_hat = lr.predict(&x).unwrap();
|
||||
|
||||
println!("y_hat shape: {:?}", y_hat.shape());
|
||||
|
||||
assert_eq!(y_hat.shape(), 52181);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
//! &[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],
|
||||
//! ]);
|
||||
//! ]).unwrap();
|
||||
//!
|
||||
//! let y: Vec<f64> = vec![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];
|
||||
@@ -455,7 +455,8 @@ mod tests {
|
||||
&[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],
|
||||
]);
|
||||
])
|
||||
.unwrap();
|
||||
|
||||
let y: Vec<f64> = vec![
|
||||
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,
|
||||
@@ -513,7 +514,7 @@ mod tests {
|
||||
// &[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],
|
||||
// ]);
|
||||
// ]).unwrap();
|
||||
|
||||
// let y = vec![
|
||||
// 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,
|
||||
|
||||
Reference in New Issue
Block a user