feat: adds e-SVR

This commit is contained in:
Volodymyr Orlov
2020-10-15 16:23:26 -07:00
parent bb96354363
commit 20e58a8817
8 changed files with 719 additions and 2 deletions
+34 -1
View File
@@ -57,7 +57,7 @@ use crate::linalg::Matrix;
use crate::linalg::{BaseMatrix, BaseVector};
use crate::math::num::RealNumber;
impl<T: RealNumber> BaseVector<T> for ArrayBase<OwnedRepr<T>, Ix1> {
impl<T: RealNumber + ScalarOperand> BaseVector<T> for ArrayBase<OwnedRepr<T>, Ix1> {
fn get(&self, i: usize) -> T {
self[i]
}
@@ -84,6 +84,14 @@ impl<T: RealNumber> BaseVector<T> for ArrayBase<OwnedRepr<T>, Ix1> {
fn fill(len: usize, value: T) -> Self {
Array::from_elem(len, value)
}
fn dot(&self, other: &Self) -> T {
self.dot(other)
}
fn approximate_eq(&self, other: &Self, error: T) -> bool {
(self - other).iter().all(|v| v.abs() <= error)
}
}
impl<T: RealNumber + ScalarOperand + AddAssign + SubAssign + MulAssign + DivAssign + Sum>
@@ -109,6 +117,10 @@ impl<T: RealNumber + ScalarOperand + AddAssign + SubAssign + MulAssign + DivAssi
self.row(row).to_vec()
}
fn get_row(&self, row: usize) -> Self::RowVector {
self.row(row).to_owned()
}
fn copy_row_as_vec(&self, row: usize, result: &mut Vec<T>) {
let mut r = 0;
for e in self.row(row).iter() {
@@ -437,6 +449,21 @@ mod tests {
assert_eq!(vec![1., 2., 3.], v.to_vec());
}
#[test]
fn vec_dot() {
let v1 = arr1(&[1., 2., 3.]);
let v2 = arr1(&[4., 5., 6.]);
assert_eq!(32.0, BaseVector::dot(&v1, &v2));
}
#[test]
fn vec_approximate_eq() {
let a = arr1(&[1., 2., 3.]);
let noise = arr1(&[1e-5, 2e-5, 3e-5]);
assert!(a.approximate_eq(&(&noise + &a), 1e-4));
assert!(!a.approximate_eq(&(&noise + &a), 1e-5));
}
#[test]
fn from_to_row_vec() {
let vec = arr1(&[1., 2., 3.]);
@@ -678,6 +705,12 @@ mod tests {
assert_eq!(res, vec![4., 5., 6.]);
}
#[test]
fn get_row() {
let a = arr2(&[[1., 2., 3.], [4., 5., 6.], [7., 8., 9.]]);
assert_eq!(arr1(&[4., 5., 6.]), a.get_row(1));
}
#[test]
fn get_col_as_vector() {
let a = arr2(&[[1., 2., 3.], [4., 5., 6.], [7., 8., 9.]]);