extern crate rusty_machine;
use rusty_machine::learning::svm::SVM;
use rusty_machine::learning::SupModel;
use rusty_machine::learning::toolkit::kernel::HyperTan;
use rusty_machine::linalg::Matrix;
use rusty_machine::linalg::Vector;
fn main() {
println!("Sign learner sample:");
println!("Training...");
let inputs = Matrix::new(11, 1, vec![
-0.1, -2., -9., -101., -666.7,
0., 0.1, 1., 11., 99., 456.7
]);
let targets = Vector::new(vec![
-1., -1., -1., -1., -1.,
1., 1., 1., 1., 1., 1.
]);
let mut svm_mod = SVM::new(HyperTan::new(100., 0.), 0.3);
svm_mod.train(&inputs, &targets).unwrap();
println!("Evaluation...");
let mut hits = 0;
let mut misses = 0;
for n in (-1000..1000).filter(|&x| x % 100 == 0) {
let nf = n as f64;
let input = Matrix::new(1, 1, vec![nf]);
let out = svm_mod.predict(&input).unwrap();
let res = if out[0] * nf > 0. {
hits += 1;
true
} else if nf == 0. {
hits += 1;
true
} else {
misses += 1;
false
};
println!("{} -> {}: {}", Matrix::data(&input)[0], out[0], res);
}
println!("Performance report:");
println!("Hits: {}, Misses: {}", hits, misses);
let hits_f = hits as f64;
let total = (hits + misses) as f64;
println!("Accuracy: {}", (hits_f / total) * 100.);
}