feat: adds accuracy, recall and precision metrics

This commit is contained in:
Volodymyr Orlov
2020-06-05 17:39:29 -07:00
parent e20e9ca6e0
commit c0c2029f2c
10 changed files with 285 additions and 8 deletions
+10 -1
View File
@@ -16,9 +16,18 @@ use evd::EVDDecomposableMatrix;
use qr::QRDecomposableMatrix;
use lu::LUDecomposableMatrix;
pub trait BaseVector<T: FloatExt>: Clone + Debug {
fn get(&self, i: usize) -> T;
fn set(&mut self, i: usize, x: T);
fn len(&self) -> usize;
}
pub trait BaseMatrix<T: FloatExt>: Clone + Debug {
type RowVector: Clone + Debug;
type RowVector: BaseVector<T> + Clone + Debug;
fn from_row_vector(vec: Self::RowVector) -> Self;
+14 -1
View File
@@ -9,13 +9,26 @@ use serde::ser::{Serializer, SerializeStruct};
use serde::de::{Deserializer, Visitor, SeqAccess, MapAccess};
use crate::linalg::Matrix;
pub use crate::linalg::BaseMatrix;
pub use crate::linalg::{BaseMatrix, BaseVector};
use crate::linalg::svd::SVDDecomposableMatrix;
use crate::linalg::evd::EVDDecomposableMatrix;
use crate::linalg::qr::QRDecomposableMatrix;
use crate::linalg::lu::LUDecomposableMatrix;
use crate::math::num::FloatExt;
impl<T: FloatExt> BaseVector<T> for Vec<T> {
fn get(&self, i: usize) -> T {
self[i]
}
fn set(&mut self, i: usize, x: T){
self[i] = x
}
fn len(&self) -> usize {
self.len()
}
}
#[derive(Debug, Clone)]
pub struct DenseMatrix<T: FloatExt> {
+33 -2
View File
@@ -4,13 +4,26 @@ use std::iter::Sum;
use nalgebra::{MatrixMN, DMatrix, Matrix, Scalar, Dynamic, U1, VecStorage};
use crate::math::num::FloatExt;
use crate::linalg::BaseMatrix;
use crate::linalg::{BaseMatrix, BaseVector};
use crate::linalg::Matrix as SmartCoreMatrix;
use crate::linalg::svd::SVDDecomposableMatrix;
use crate::linalg::evd::EVDDecomposableMatrix;
use crate::linalg::qr::QRDecomposableMatrix;
use crate::linalg::lu::LUDecomposableMatrix;
impl<T: FloatExt + 'static> BaseVector<T> for MatrixMN<T, U1, Dynamic> {
fn get(&self, i: usize) -> T {
*self.get((0, i)).unwrap()
}
fn set(&mut self, i: usize, x: T){
*self.get_mut((0, i)).unwrap() = x;
}
fn len(&self) -> usize{
self.len()
}
}
impl<T: FloatExt + Scalar + AddAssign + SubAssign + MulAssign + DivAssign + Sum + 'static> BaseMatrix<T> for Matrix<T, Dynamic, Dynamic, VecStorage<T, Dynamic, Dynamic>>
{
type RowVector = MatrixMN<T, U1, Dynamic>;
@@ -340,6 +353,24 @@ mod tests {
use super::*;
use nalgebra::{Matrix2x3, DMatrix, RowDVector};
#[test]
fn vec_len() {
let v = RowDVector::from_vec(vec!(1., 2., 3.));
assert_eq!(3, v.len());
}
#[test]
fn get_set_vector() {
let mut v = RowDVector::from_vec(vec!(1., 2., 3., 4.));
let expected = RowDVector::from_vec(vec!(1., 5., 3., 4.));
v.set(1, 5.);
assert_eq!(v, expected);
assert_eq!(5., BaseVector::get(&v, 1));
}
#[test]
fn get_set_dynamic() {
let mut m = DMatrix::from_row_slice(
@@ -355,7 +386,7 @@ mod tests {
assert_eq!(m, expected);
assert_eq!(10., BaseMatrix::get(&m, 1, 1));
}
}
#[test]
fn zeros() {
+31 -2
View File
@@ -9,13 +9,25 @@ use ndarray::{Array, ArrayBase, OwnedRepr, Ix2, Ix1, Axis, stack, s};
use ndarray::ScalarOperand;
use crate::math::num::FloatExt;
use crate::linalg::BaseMatrix;
use crate::linalg::{BaseMatrix, BaseVector};
use crate::linalg::Matrix;
use crate::linalg::svd::SVDDecomposableMatrix;
use crate::linalg::evd::EVDDecomposableMatrix;
use crate::linalg::qr::QRDecomposableMatrix;
use crate::linalg::lu::LUDecomposableMatrix;
impl<T: FloatExt> BaseVector<T> for ArrayBase<OwnedRepr<T>, Ix1> {
fn get(&self, i: usize) -> T {
self[i]
}
fn set(&mut self, i: usize, x: T){
self[i] = x;
}
fn len(&self) -> usize{
self.len()
}
}
impl<T: FloatExt + ScalarOperand + AddAssign + SubAssign + MulAssign + DivAssign + Sum> BaseMatrix<T> for ArrayBase<OwnedRepr<T>, Ix2>
{
@@ -308,6 +320,23 @@ mod tests {
use super::*;
use ndarray::{arr1, arr2, Array2};
#[test]
fn vec_get_set() {
let mut result = arr1(&[1., 2., 3.]);
let expected = arr1(&[1., 5., 3.]);
result.set(1, 5.);
assert_eq!(result, expected);
assert_eq!(5., BaseVector::get(&result, 1));
}
#[test]
fn vec_len() {
let v = arr1(&[1., 2., 3.]);
assert_eq!(3, v.len());
}
#[test]
fn from_to_row_vec() {
@@ -449,7 +478,7 @@ mod tests {
assert_eq!(result, expected);
assert_eq!(10., BaseMatrix::get(&result, 1, 1));
}
}
#[test]
fn dot() {