automl 0.3.0

Automated machine learning for classification and regression
Documentation
#![allow(clippy::float_cmp)]

use automl::DenseMatrix;
use automl::utils::{FeatureError, interaction_features, polynomial_features};
use smartcore::linalg::basic::arrays::{Array, Array2};

#[test]
fn interaction_adds_pairwise_products() {
    let x = DenseMatrix::from_2d_vec(&vec![vec![1.0, 2.0], vec![3.0, 4.0]]).unwrap();
    let augmented = interaction_features(x.clone()).unwrap();
    assert_eq!(augmented.shape(), (2, 3));
    assert_eq!(*augmented.get((0, 2)), 2.0);
    assert_eq!(*augmented.get((1, 2)), 12.0);
}

#[test]
fn polynomial_adds_squared_and_cross_terms() {
    let x = DenseMatrix::from_2d_vec(&vec![vec![1.0, 2.0], vec![3.0, 4.0]]).unwrap();
    let augmented = polynomial_features(x.clone(), 2).unwrap();
    assert_eq!(augmented.shape(), (2, 5));
    assert_eq!(*augmented.get((0, 2)), 1.0);
    assert_eq!(*augmented.get((0, 3)), 2.0);
    assert_eq!(*augmented.get((0, 4)), 4.0);
}

#[test]
fn interaction_errors_on_empty_input() {
    let x = DenseMatrix::<f64>::zeros(0, 2);
    let err = interaction_features(x).unwrap_err();
    assert_eq!(err, FeatureError::InvalidInputDimensions);
}

#[test]
fn polynomial_errors_on_empty_input() {
    let x = DenseMatrix::<f64>::zeros(0, 2);
    let err = polynomial_features(x, 2).unwrap_err();
    assert_eq!(err, FeatureError::InvalidInputDimensions);
}