I am building a small library for computing information retrieval metrics for classifiers (precision, recall, f1, accuracy, whatever). Typically each metric is built by calculating a single value for each object being classified (each metric will have its own formula there) and then calculating a single value (an average) aggregating all those single values; hence a mapper and a reducer.

With little formal training in numeric stability, I wonder what would be the most numerically stable way to calculate the average, and what might be the most interesting trade-offs between stability, avoidance of overflow, and computational complexity (performance).

Also any reference to a mathematical reading in this vein would be entirely welcome, for this, as well as for as similar future cases.

Thanks in advance!

  • $\begingroup$ By the way, the language I wrote this in (clojure), directly supports a numeric type of rational numbers, which makes an interesting deviation from many standard languages/libraries I know of, and may imply a specialized solution for this question. $\endgroup$
    – matanster
    Jun 22, 2017 at 4:00
  • $\begingroup$ Did you try Googling for "numerically stable average". The first non-SE answer will tell you about Kahan summation algorithm (which is the tricky bit of calculating the average). $\endgroup$ Jun 23, 2017 at 5:50


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.