use crate::Sample;
pub trait Classifier {
fn confidence(&self, sample: &Sample, row: usize) -> f64;
fn predict(&self, sample: &Sample, row: usize) -> i64 {
let conf = self.confidence(sample, row);
if conf >= 0.0 { 1 } else { -1 }
}
fn confidence_all(&self, sample: &Sample) -> Vec<f64> {
let n_sample = sample.shape().0;
(0..n_sample).map(|row| self.confidence(sample, row))
.collect::<Vec<_>>()
}
fn predict_all(&self, sample: &Sample) -> Vec<i64>
{
let n_sample = sample.shape().0;
(0..n_sample).map(|row| self.predict(sample, row))
.collect::<Vec<_>>()
}
}
pub trait Regressor {
fn predict(&self, sample: &Sample, row: usize) -> f64;
fn predict_all(&self, sample: &Sample) -> Vec<f64>
{
let n_sample = sample.shape().0;
(0..n_sample).map(|row| self.predict(sample, row))
.collect::<Vec<_>>()
}
}