diff options
Diffstat (limited to 'ml/dlib/dlib/statistics/average_precision_abstract.h')
-rw-r--r-- | ml/dlib/dlib/statistics/average_precision_abstract.h | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/ml/dlib/dlib/statistics/average_precision_abstract.h b/ml/dlib/dlib/statistics/average_precision_abstract.h new file mode 100644 index 000000000..76c2c702a --- /dev/null +++ b/ml/dlib/dlib/statistics/average_precision_abstract.h @@ -0,0 +1,67 @@ +// Copyright (C) 2013 Davis E. King (davis@dlib.net) +// License: Boost Software License See LICENSE.txt for the full license. +#undef DLIB_AVERAGE_PREcISION_ABSTRACT_Hh_ +#ifdef DLIB_AVERAGE_PREcISION_ABSTRACT_Hh_ + +#include <vector> + +namespace dlib +{ + +// ---------------------------------------------------------------------------------------- + + template < + typename alloc + > + double average_precision ( + const std::vector<bool,alloc>& items, + unsigned long missing_relevant_items = 0 + ); + /*! + ensures + - Interprets items as a list of relevant and non-relevant items in a response + from an information retrieval system. In particular, items with a true value + are relevant and false items are non-relevant. This function then returns + the average precision of the ranking of the given items. For, example, the + ranking [true, true, true, true, false] would have an average precision of 1. + On the other hand, the ranking of [true false false true] would have an + average precision of 0.75 (because the first true has a precision of 1 and + the second true has a precision of 0.5, giving an average of 0.75). + - As a special case, if item contains no true elements then the average + precision is considered to be 1. + - Note that we use the interpolated precision. That is, the interpolated + precision at a recall value r is set to the maximum precision obtained at any + higher recall value. Or in other words, we interpolate the precision/recall + curve so that precision is monotonically decreasing. Therefore, the average + precision value returned by this function is the area under this interpolated + precision/recall curve. + - This function will add in missing_relevant_items number of items with a + precision of zero into the average value returned. For example, the average + precision of the ranking [true, true] if there are 2 missing relevant items + is 0.5. + !*/ + +// ---------------------------------------------------------------------------------------- + + template < + typename T, + typename alloc + > + double average_precision ( + const std::vector<std::pair<T,bool>,alloc>& items, + unsigned long missing_relevant_items = 0 + ); + /*! + ensures + - this function is equivalent to copying the bool values from items into a + std::vector<bool> and then calling the above average_precision() routine on + it and returning the result. + !*/ + +// ---------------------------------------------------------------------------------------- + +} + +#endif // DLIB_AVERAGE_PREcISION_ABSTRACT_Hh_ + + |