1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
//! # Common Interfaces and API
//!
//! This module provides interfaces and uniform API with simple conventions
//! that are used in other modules for supervised and unsupervised learning.

use crate::error::Failed;

/// An estimator for unsupervised learning, that provides method `fit` to learn from data
pub trait UnsupervisedEstimator<X, P> {
    /// Fit a model to a training dataset, estimate model's parameters.
    /// * `x` - _NxM_ matrix with _N_ observations and _M_ features in each observation.
    /// * `parameters` - hyperparameters of an algorithm
    fn fit(x: &X, parameters: P) -> Result<Self, Failed>
    where
        Self: Sized,
        P: Clone;
}

/// An estimator for supervised learning, that provides method `fit` to learn from data and training values
pub trait SupervisedEstimator<X, Y, P>: Predictor<X, Y> {
    /// Empty constructor, instantiate an empty estimator. Object is dropped as soon as `fit()` is called.
    /// used to pass around the correct `fit()` implementation.
    /// by calling `::fit()`. mostly used to be used with `model_selection::cross_validate(...)`
    fn new() -> Self;
    /// Fit a model to a training dataset, estimate model's parameters.
    /// * `x` - _NxM_ matrix with _N_ observations and _M_ features in each observation.
    /// * `y` - target training values of size _N_.
    /// * `parameters` - hyperparameters of an algorithm
    fn fit(x: &X, y: &Y, parameters: P) -> Result<Self, Failed>
    where
        Self: Sized,
        P: Clone;
}

/// An estimator for supervised learning.
/// In this one parameters are borrowed instead of moved, this is useful for parameters that carry
/// references. Also to be used when there is no predictor attached to the estimator.
pub trait SupervisedEstimatorBorrow<'a, X, Y, P> {
    /// Empty constructor, instantiate an empty estimator. Object is dropped as soon as `fit()` is called.
    /// used to pass around the correct `fit()` implementation.
    /// by calling `::fit()`. mostly used to be used with `model_selection::cross_validate(...)`
    fn new() -> Self;
    /// Fit a model to a training dataset, estimate model's parameters.
    /// * `x` - _NxM_ matrix with _N_ observations and _M_ features in each observation.
    /// * `y` - target training values of size _N_.
    /// * `&parameters` - hyperparameters of an algorithm
    fn fit(x: &'a X, y: &'a Y, parameters: &'a P) -> Result<Self, Failed>
    where
        Self: Sized,
        P: Clone;
}

/// Implements method predict that estimates target value from new data
pub trait Predictor<X, Y> {
    /// Estimate target values from new data.
    /// * `x` - _NxM_ matrix with _N_ observations and _M_ features in each observation.
    fn predict(&self, x: &X) -> Result<Y, Failed>;
}

/// Implements method predict that estimates target value from new data, with borrowing
pub trait PredictorBorrow<'a, X, T> {
    /// Estimate target values from new data.
    /// * `x` - _NxM_ matrix with _N_ observations and _M_ features in each observation.
    fn predict(&self, x: &'a X) -> Result<Vec<T>, Failed>;
}

/// Implements method transform that filters or modifies input data
pub trait Transformer<X> {
    /// Transform data by modifying or filtering it
    /// * `x` - _NxM_ matrix with _N_ observations and _M_ features in each observation.
    fn transform(&self, x: &X) -> Result<X, Failed>;
}

/// empty parameters for an estimator, see `BiasedEstimator`
pub trait NoParameters {}