use serde::de::DeserializeOwned;
use serde::{Deserialize, Serialize};
use std::fmt;
use super::id::*;
use super::status::*;
use super::{Resource, ResourceCommon};
#[derive(Clone, Debug, Deserialize, Resource, Serialize)]
#[serde(bound(deserialize = ""))]
#[api_name = "evaluation"]
#[non_exhaustive]
pub struct Evaluation<R: Result> {
#[serde(flatten)]
pub common: ResourceCommon,
pub resource: Id<Evaluation<R>>,
pub status: GenericStatus,
pub result: R,
}
pub trait Result:
fmt::Debug + DeserializeOwned + Send + Serialize + Sized + Sync + 'static
{
}
#[derive(Debug, Deserialize, Serialize)]
#[non_exhaustive]
pub struct ClassificationResult {
pub class_names: Vec<String>,
pub mode: DetailedClassificationResult,
pub model: DetailedClassificationResult,
pub random: DetailedClassificationResult,
}
impl Result for ClassificationResult {}
#[derive(Debug, Deserialize, Serialize)]
#[non_exhaustive]
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>,
}
#[derive(Debug, Deserialize, Serialize)]
#[non_exhaustive]
pub struct ClassificationPerClassStatistics {
pub accuracy: f64,
pub class_name: String,
pub f_measure: f64,
pub phi_coefficient: f64,
pub precision: f64,
pub recall: f64,
}