use linfa::metrics::ToConfusionMatrix;
use linfa::traits::{Fit, Predict, Transformer};
use linfa_bayes::GaussianNb;
use linfa_preprocessing::linear_scaling::LinearScaler;
fn main() {
let (train, valid) = linfa_datasets::winequality()
.map_targets(|x| if *x > 6 { 1 } else { 0 })
.split_with_ratio(0.7);
let scaler = LinearScaler::standard().fit(&train).unwrap();
let train = scaler.transform(train);
let valid = scaler.transform(valid);
let model = GaussianNb::params().fit(&train).unwrap();
let train_acc = model
.predict(&train)
.confusion_matrix(&train)
.unwrap()
.accuracy();
let cm = model.predict(&valid).confusion_matrix(&valid).unwrap();
let valid_acc = cm.accuracy();
println!("Scaled model training and validation accuracies: {train_acc} - {valid_acc}");
println!("{cm:?}",);
}