MetricsCalculationUtils.java
package com.kapil.verbametrics.ml.utils;
/**
* Utility class for calculating various machine learning metrics via centralized methods.
*
* @author Kapil Garg
*/
public class MetricsCalculationUtils {
/**
* Calculates F1-score from precision and recall.
* F1-score is the harmonic mean of precision and recall.
*
* @param precision The precision value (0.0 to 1.0)
* @param recall The recall value (0.0 to 1.0)
* @return F1-score value (0.0 to 1.0), or 0.0 if precision + recall = 0
*/
public static double calculateF1Score(double precision, double recall) {
// Handle edge cases: NaN, infinite values, or negative values
if (Double.isNaN(precision) || Double.isNaN(recall) ||
Double.isInfinite(precision) || Double.isInfinite(recall) ||
precision < 0.0 || recall < 0.0) {
return 0.0;
}
// Handle division by zero with floating-point precision tolerance
double sum = precision + recall;
if (Math.abs(sum) < 1e-10) { // Use epsilon for floating-point comparison
return 0.0;
}
return 2.0 * (precision * recall) / sum;
}
/**
* Calculates overall quality score as the average of multiple metrics.
*
* @param accuracy The accuracy value
* @param precision The precision value
* @param recall The recall value
* @param f1Score The F1-score value
* @return Average quality score (0.0 to 1.0)
*/
public static double calculateQualityScore(double accuracy, double precision, double recall, double f1Score) {
return (accuracy + precision + recall + f1Score) / 4.0;
}
}