use linfa::composing::MultiClassModel;
use linfa::prelude::*;
use linfa_svm::{error::Result, Svm};
fn main() -> Result<()> {
let (train, valid) = linfa_datasets::winequality().split_with_ratio(0.9);
println!(
"Fit SVM classifier with #{} training points",
train.nsamples()
);
let params = Svm::<_, Pr>::params()
.gaussian_kernel(30.0);
let model = train
.one_vs_all()?
.into_iter()
.map(|(l, x)| (l, params.fit(&x).unwrap()))
.collect::<MultiClassModel<_, _>>();
let pred = model.predict(&valid);
let cm = pred.confusion_matrix(&valid)?;
println!("{cm:?}");
println!("accuracy {}, MCC {}", cm.accuracy(), cm.mcc());
Ok(())
}