solvr 0.2.0-beta.2

Advanced computing library for real-world problem solving - optimization, differential equations, interpolation, statistics, and more
Documentation
//! Cluster evaluation metrics trait.
use crate::DType;

use numr::error::Result;
use numr::ops::DistanceMetric;
use numr::runtime::Runtime;
use numr::tensor::Tensor;

/// Homogeneity, Completeness, V-Measure scores.
#[derive(Debug, Clone)]
pub struct HCVScore<R: Runtime<DType = DType>> {
    pub homogeneity: Tensor<R>,
    pub completeness: Tensor<R>,
    pub v_measure: Tensor<R>,
}

/// Cluster evaluation metrics.
pub trait ClusterMetricsAlgorithms<R: Runtime<DType = DType>> {
    /// Mean silhouette coefficient (scalar).
    fn silhouette_score(
        &self,
        data: &Tensor<R>,
        labels: &Tensor<R>,
        metric: DistanceMetric,
    ) -> Result<Tensor<R>>;

    /// Per-sample silhouette coefficients `[n]`.
    fn silhouette_samples(
        &self,
        data: &Tensor<R>,
        labels: &Tensor<R>,
        metric: DistanceMetric,
    ) -> Result<Tensor<R>>;

    /// Calinski-Harabasz index (scalar).
    fn calinski_harabasz_score(&self, data: &Tensor<R>, labels: &Tensor<R>) -> Result<Tensor<R>>;

    /// Davies-Bouldin index (scalar).
    fn davies_bouldin_score(&self, data: &Tensor<R>, labels: &Tensor<R>) -> Result<Tensor<R>>;

    /// Adjusted Rand Index (scalar).
    fn adjusted_rand_score(
        &self,
        labels_true: &Tensor<R>,
        labels_pred: &Tensor<R>,
    ) -> Result<Tensor<R>>;

    /// Normalized Mutual Information (scalar).
    fn normalized_mutual_info_score(
        &self,
        labels_true: &Tensor<R>,
        labels_pred: &Tensor<R>,
    ) -> Result<Tensor<R>>;

    /// Homogeneity, Completeness, V-Measure.
    fn homogeneity_completeness_v_measure(
        &self,
        labels_true: &Tensor<R>,
        labels_pred: &Tensor<R>,
    ) -> Result<HCVScore<R>>;
}