mlpack
recall_impl.hpp
Go to the documentation of this file.
1 
12 #ifndef MLPACK_CORE_CV_METRICS_RECALL_IMPL_HPP
13 #define MLPACK_CORE_CV_METRICS_RECALL_IMPL_HPP
14 
16 
17 namespace mlpack {
18 namespace cv {
19 
20 template<AverageStrategy AS, size_t PC /* PositiveClass */>
21 template<typename MLAlgorithm, typename DataType>
22 double Recall<AS, PC>::Evaluate(MLAlgorithm& model,
23  const DataType& data,
24  const arma::Row<size_t>& labels)
25 {
26  return Evaluate<AS>(model, data, labels);
27 }
28 
29 template<AverageStrategy AS, size_t PC /* PositiveClass */>
30 template<AverageStrategy _AS, typename MLAlgorithm, typename DataType, typename>
31 double Recall<AS, PC>::Evaluate(MLAlgorithm& model,
32  const DataType& data,
33  const arma::Row<size_t>& labels)
34 {
35  util::CheckSameSizes(data, labels, "Recall<Binary>::Evaluate()");
36 
37  arma::Row<size_t> predictedLabels;
38  model.Classify(data, predictedLabels);
39 
40  size_t tp = arma::sum((labels == PC) % (predictedLabels == PC));
41  size_t numberOfPositiveClassInstances = arma::sum(labels == PC);
42 
43  return double(tp) / numberOfPositiveClassInstances;
44 }
45 
46 template<AverageStrategy AS, size_t PC /* PositiveClass */>
47 template<AverageStrategy _AS, typename MLAlgorithm, typename DataType, typename,
48  typename>
49 double Recall<AS, PC>::Evaluate(MLAlgorithm& model,
50  const DataType& data,
51  const arma::Row<size_t>& labels)
52 {
53  util::CheckSameSizes(data, labels, "Recall<Micro>::Evaluate()");
54 
55  // Microaveraged recall is really the same as accuracy.
56  return Accuracy::Evaluate(model, data, labels);
57 }
58 
59 template<AverageStrategy AS, size_t PC /* PositiveClass */>
60 template<AverageStrategy _AS, typename MLAlgorithm, typename DataType, typename,
61  typename, typename>
62 double Recall<AS, PC>::Evaluate(MLAlgorithm& model,
63  const DataType& data,
64  const arma::Row<size_t>& labels)
65 {
66  util::CheckSameSizes(data, labels, "Recall<Macro>::Evaluate()");
67 
68  arma::Row<size_t> predictedLabels;
69  model.Classify(data, predictedLabels);
70 
71  size_t numClasses = arma::max(labels) + 1;
72 
73  arma::vec recalls = arma::vec(numClasses);
74  for (size_t c = 0; c < numClasses; ++c)
75  {
76  size_t tp = arma::sum((labels == c) % (predictedLabels == c));
77  size_t positiveLabels = arma::sum(labels == c);
78  recalls(c) = double(tp) / positiveLabels;
79  }
80 
81  return arma::mean(recalls);
82 }
83 
84 } // namespace cv
85 } // namespace mlpack
86 
87 #endif
Linear algebra utility functions, generally performed on matrices or vectors.
Definition: cv.hpp:1
static double Evaluate(MLAlgorithm &model, const DataType &data, const arma::Row< size_t > &labels)
Run classification and calculate accuracy.
Definition: accuracy_impl.hpp:19
static double Evaluate(MLAlgorithm &model, const DataType &data, const arma::Row< size_t > &labels)
Run classification and calculate recall.
Definition: recall_impl.hpp:22
AverageStrategy
This enum declares possible strategies for averaging that can be used in some metrics like precision...
Definition: average_strategy.hpp:25