use hessboost::prelude::*;
mod common;
use common::{accuracy, fill_random, lcg};
fn main() -> Result<()> {
let (n, f, k) = (1500usize, 4usize, 3usize);
let mut rng = lcg(7);
let mut x = vec![0f32; n * f];
let mut y = vec![0f32; n];
fill_random(&mut rng, &mut x);
for i in 0..n {
let s = x[i * f] + x[i * f + 1];
y[i] = if s < 0.7 {
0.0
} else if s < 1.3 {
1.0
} else {
2.0
};
}
let dtrain = DMatrix::from_dense(&x, n, f)?.with_labels(&y)?;
let params = TrainingParams::builder()
.objective("multi:softprob")
.num_class(k) .max_depth(4)
.eta(0.2)
.build()?;
let model = train(¶ms, &dtrain, 60)?;
let probs = model.predict(&dtrain)?;
let row0 = &probs[0..k];
println!(
"row 0 class probabilities: {row0:?} (sums to {:.3})",
row0.iter().sum::<f32>()
);
let classes = model.predict_class(&dtrain)?;
let acc = accuracy(&classes, &y);
println!("training accuracy: {acc:.3}");
Ok(())
}