use crate::error::RillError;
use crate::sparse::SparseFeatures;
pub trait OnlineRegressor {
fn feature_count(&self) -> usize;
fn samples_seen(&self) -> u64;
fn predict(&self, features: &[f64]) -> Result<f64, RillError>;
fn learn(&mut self, features: &[f64], target: f64) -> Result<(), RillError>;
fn reset(&mut self);
}
pub trait OnlineBinaryClassifier {
fn feature_count(&self) -> usize;
fn samples_seen(&self) -> u64;
fn predict_proba(&self, features: &[f64]) -> Result<f64, RillError>;
fn predict(&self, features: &[f64]) -> Result<bool, RillError> {
Ok(self.predict_proba(features)? >= 0.5)
}
fn learn(&mut self, features: &[f64], target: bool) -> Result<(), RillError>;
fn reset(&mut self);
}
pub trait Transformer {
fn input_dim(&self) -> usize;
fn output_dim(&self) -> usize;
fn transform(&self, features: &[f64]) -> Result<Vec<f64>, RillError>;
fn update(&mut self, features: &[f64]) -> Result<(), RillError>;
fn samples_seen(&self) -> u64;
fn reset(&mut self);
}
pub trait Metric {
type Truth;
type Prediction;
fn update(&mut self, truth: Self::Truth, prediction: Self::Prediction)
-> Result<(), RillError>;
fn value(&self) -> Option<f64>;
fn samples_seen(&self) -> u64;
fn reset(&mut self);
}
pub trait OnlineStatistic {
fn update(&mut self, value: f64) -> Result<(), RillError>;
fn samples_seen(&self) -> u64;
fn reset(&mut self);
}
pub trait SparseRegressor {
fn samples_seen(&self) -> u64;
fn predict(&self, features: &SparseFeatures) -> Result<f64, RillError>;
fn learn(&mut self, features: &SparseFeatures, target: f64) -> Result<(), RillError>;
fn reset(&mut self);
}
pub trait SparseClassifier {
fn samples_seen(&self) -> u64;
fn predict_proba(&self, features: &SparseFeatures) -> Result<f64, RillError>;
fn predict(&self, features: &SparseFeatures) -> Result<bool, RillError> {
Ok(self.predict_proba(features)? >= 0.5)
}
fn learn(&mut self, features: &SparseFeatures, target: bool) -> Result<(), RillError>;
fn reset(&mut self);
}