Source code for kosmos.ml.sl_metrics
from dataclasses import dataclass
from numpy import ndarray
from sklearn.metrics import accuracy_score, f1_score, precision_score, recall_score
[docs]
@dataclass(frozen=True)
class SLMetrics:
"""Supervised learning classification evaluation metrics.
Attributes:
accuracy (float): Overall classification accuracy.
precision (float): Macro-averaged precision across classes.
recall (float): Macro-averaged recall across classes.
f1 (float): Macro-averaged F1 score across classes.
"""
accuracy: float
precision: float
recall: float
f1: float
def __str__(self) -> str:
"""Return a human-readable string with all metrics formatted to four decimals."""
return (
f"Accuracy: {self.accuracy:.4f} | "
f"Precision: {self.precision:.4f} | "
f"Recall: {self.recall:.4f} | "
f"F1: {self.f1:.4f}"
)
[docs]
def calculate_sl_metrics(y_true: ndarray, y_pred: ndarray) -> SLMetrics:
"""Calculate supervised learning classification metrics for a given prediction.
Args:
y_true (ndarray): Ground-truth labels.
y_pred (ndarray): Predicted labels.
Returns:
SLMetrics: Evaluation metrics.
"""
return SLMetrics(
accuracy=accuracy_score(y_true, y_pred),
precision=precision_score(y_true, y_pred, average="macro", zero_division=0),
recall=recall_score(y_true, y_pred, average="macro", zero_division=0),
f1=f1_score(y_true, y_pred, average="macro", zero_division=0),
)