use serde::Serialize;
use serde::de::DeserializeOwned;
use std::fmt;
use super::Resource;
use super::id::*;
use super::status::*;
resource! {
api_name "evaluation";
#[derive(Debug, Deserialize, Clone)]
#[serde(bound(deserialize = ""))]
pub struct Evaluation<R: Result> {
pub status: GenericStatus,
pub result: R,
}
}
pub trait Result: fmt::Debug + DeserializeOwned + Serialize + Sized {
}
#[derive(Debug, Deserialize, Serialize)]
pub struct ClassificationResult {
pub class_names: Vec<String>,
pub mode: DetailedClassificationResult,
pub model: DetailedClassificationResult,
pub random: DetailedClassificationResult,
#[serde(default, skip_serializing)]
_hidden: (),
}
impl Result for ClassificationResult {}
#[derive(Debug, Deserialize, Serialize)]
pub struct DetailedClassificationResult {
pub accuracy: f64,
pub average_f_measure: f64,
pub average_phi: f64,
pub average_precision: f64,
pub average_recall: f64,
pub confusion_matrix: Vec<Vec<f64>>,
pub per_class_statistics: Vec<ClassificationPerClassStatistics>,
#[serde(default, skip_serializing)]
_hidden: (),
}
#[derive(Debug, Deserialize, Serialize)]
pub struct ClassificationPerClassStatistics {
pub accuracy: f64,
pub class_name: String,
pub f_measure: f64,
pub phi_coefficient: f64,
pub precision: f64,
pub recall: f64,
}