pub mod huber;
pub mod log_loss;
pub mod squared;
pub use huber::HuberLoss;
pub use log_loss::BinaryLogLoss;
pub use squared::SquaredError;
#[derive(Debug, Clone, Default)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum RegressionLoss {
#[default]
SquaredError,
Huber(HuberLoss),
}
impl RegressionLoss {
pub fn loss(&self, prediction: f64, target: f64) -> f64 {
match self {
RegressionLoss::SquaredError => SquaredError::loss(prediction, target),
RegressionLoss::Huber(h) => h.loss(prediction, target),
}
}
pub fn gradient(&self, prediction: f64, target: f64) -> f64 {
match self {
RegressionLoss::SquaredError => SquaredError::gradient(prediction, target),
RegressionLoss::Huber(h) => h.gradient(prediction, target),
}
}
}