FisherScorer.java

package org.hammer.audio.experimental.acoustic.feature.ranking;

import org.hammer.audio.experimental.acoustic.feature.evaluation.FeatureEvaluationEntry;

/**
 * Scores features using the Fisher discriminant ratio.
 *
 * <p>The Fisher ratio is defined as {@code betweenClassVariance / withinClassVariance}. A higher
 * ratio means that class means are further apart relative to within-class spread, indicating better
 * linear separability. When the within-class variance is zero the score is zero (avoid division by
 * zero for constant features).
 */
public final class FisherScorer implements FeatureScorer {

  @Override
  public double score(FeatureEvaluationEntry entry) {
    return entry.separation().fisherRatio();
  }

  @Override
  public String name() {
    return "fisherRatio";
  }
}