summaryrefslogtreecommitdiffstats
path: root/ml/dlib/dlib/statistics/average_precision_abstract.h
diff options
context:
space:
mode:
Diffstat (limited to 'ml/dlib/dlib/statistics/average_precision_abstract.h')
-rw-r--r--ml/dlib/dlib/statistics/average_precision_abstract.h67
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_
+
+