I'm trying to follow through using the hyperbolic tangent for score normalization as here: Conference Paper An Evaluation of Score Level Fusion Approaches for Fingerpri...
It states there that the final values should be between 0 and 1, however my final output is in the range between 0.47 and 0.51 for a number of sets of scores.
Most of these sets are already between the range [0,1] - although some have quite a different range of separability between genuine and mismatch scores.
The process I am performing is to calculate the mean of all genuine match scores, and the standard deviation of the entire set (as described in the paper) - and then I parse it into a tanh normalization function. I notice some other papers use a different set of means/standard deviations, but all combinations I try end up with similar results.
Here is my normalization code (written in Rust). Constants is just a struct containing all stats for genuine/mismatch/all.
pub fn tanh_normalization(score: f32, constants: &ScoreConstants) -> f32 {
let internal = 0.01 * (score - constants.genuine.mean) / constants.all.standard_deviation;
return 0.5 * (internal.tanh() + 1.);
}
Does anyone have any ideas that could help me? Or any other papers related to this that might help?
Thanks in advance.