classifier-measures 0.4.3

Receiver Operating Characteristic (ROC) and Precision-Recall curve (PR) computation
Documentation

extern crate classifier_measures;

use classifier_measures::roc_auc;


#[derive(PartialEq)]
enum Sex { M, F }

struct Person {
    name: &'static str,
    sex: Sex,
}

const FEMALES: [&str; 50] =
    ["Kyra", "Kaylie", "Angelique", "Mckenzie", "Genevieve", "Liliana", "Kamila", "Kylee", "Amani",
    "Liana", "Jaycee", "Athena", "Crystal", "Sage", "Francesca", "Lindsey", "Makena", "Amina",
    "Sofia", "Hana", "Giselle", "Marley", "Shelby", "Lucy", "Giuliana", "Liberty", "Nataly",
    "Marlie", "Leticia", "Belen", "Miley", "Ariella", "Evelin", "Saniya", "Erin", "Priscilla",
    "Elisa", "Destinee", "Nathalia", "Julianna", "Isabella", "Paloma", "Christina", "Jaylene",
    "Essence", "Zoe", "Cristina", "Shannon", "Aurora", "Alana"];

const MALES: [&str; 50] =
    ["Winston", "Issac", "James", "Braylen", "Reid", "Omar", "Dallas", "Anthony", "Jayce", "Bryce",
    "Dane", "Yusuf", "Desmond", "Tony", "Kade", "Elvis", "Ronnie", "Alessandro", "Kadyn", "Jaydan",
    "Alexander", "Brandon", "Paxton", "Shaun", "Ali", "Grayson", "Francis", "Jamie", "Luca",
    "Izaiah", "Keshawn", "Terrell", "Ricky", "Jermaine", "Donovan", "John", "Frankie", "Thaddeus",
    "Nathen", "King", "Aiden", "Joel", "Marcel", "Prince", "Aryan", "Jasiah", "Phoenix", "Mathew",
    "Isaac", "Kane"];

fn get_people() -> Vec<Person> {
    FEMALES.into_iter()
        .map(|name| Person { name, sex: Sex::F })
        .chain(MALES.into_iter()
        .map(|name| Person { name, sex: Sex::M }))
        .collect::<Vec<_>>()
}


fn main() {
    let data = get_people();
    println!("Gender classifier strengths (ROC AUC):");

    println!("  Name length: {:.4}",
        roc_auc(&data, |p| (p.sex == Sex::F, p.name.len() as f64)).unwrap());

    println!("  Number of vowels in a name: {:.4}",
        roc_auc(&data, |p| (
            p.sex == Sex::F,
            p.name.bytes().filter(|&c| "aeiouy".bytes().any(|d| d == c)).count() as f64)
        ).unwrap());

    println!("  Name ends with a vowel: {:.4}",
        roc_auc(&data, |p| (
            p.sex == Sex::F,
            "aeiouy".bytes().filter(|&c| Some(c) == p.name.bytes().rev().next()).count() as f64
        )).unwrap());
}