use std::default::Default;
#[derive(Clone, Default)]
pub enum LinearUpdate {
#[default]
Shotgun,
CoordDescent,
}
impl std::fmt::Display for LinearUpdate {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
let result = match *self {
LinearUpdate::Shotgun => "shotgun".to_owned(),
LinearUpdate::CoordDescent => "coord_descent".to_owned(),
};
write!(f, "{}", result)
}
}
#[derive(Builder, Clone)]
#[builder(default)]
pub struct LinearBoosterParameters {
lambda: f32,
alpha: f32,
updater: LinearUpdate,
}
impl LinearBoosterParameters {
pub(crate) fn as_string_pairs(&self) -> Vec<(String, String)> {
vec![
("booster".to_owned(), "gblinear".to_owned()),
("lambda".to_owned(), self.lambda.to_string()),
("alpha".to_owned(), self.alpha.to_string()),
("updater".to_owned(), self.updater.to_string()),
]
}
}
impl Default for LinearBoosterParameters {
fn default() -> Self {
LinearBoosterParameters {
lambda: 0.0,
alpha: 0.0,
updater: LinearUpdate::default(),
}
}
}