Ultra 0.9.4
Loading...
Searching...
No Matches
metrics.h
Go to the documentation of this file.
1
12
13#if !defined(ULTRA_SRC_CALCULATE_METRICS_H)
14#define ULTRA_SRC_CALCULATE_METRICS_H
15
17
18#include <cmath>
19#include <limits>
20#include <ranges>
21
22namespace ultra::src::metrics
23{
24
46template<ClassificationPredictor P>
47[[nodiscard]] double accuracy(const P &p, const dataframe &d)
48{
49 Expects(d.classes() >= 2);
50 Expects(d.size());
51
52 const auto ok(std::ranges::count_if(
53 d,
54 [&p](const auto &e)
55 {
56 return p.tag(e.input).label == label(e);
57 }));
58
59 return static_cast<double>(ok) / static_cast<double>(d.size());
60}
61
72template<RegressionPredictor P>
73[[nodiscard]] double mae(const P &p, const dataframe &d)
74{
75 Expects(!d.classes());
76 Expects(d.size());
77
78 double sum(0.0);
79 std::size_t n(0);
80
81 for (const auto &e : d)
82 if (const auto res(p(e.input)); has_value(res))
83 {
84 sum += std::fabs(std::get<D_DOUBLE>(res) - label_as<D_DOUBLE>(e));
85 ++n;
86 }
87
88 return n ? sum / static_cast<double>(n)
89 : std::numeric_limits<double>::infinity();
90}
91
92} // namespace ultra::src::metrics
93
94#endif // include guard
Definition dataframe.h:76
class_t classes() const noexcept
Definition dataframe.cc:259
std::size_t size() const noexcept
Definition dataframe.cc:242
class_t label(const example &e)
Definition dataframe.cc:87
T label_as(const src::example &e)
Definition dataframe.h:181
double mae(const P &p, const dataframe &d)
Definition metrics.h:73
double accuracy(const P &p, const dataframe &d)
Definition metrics.h:47
bool has_value(const value_t &v) noexcept
Definition value.cc:31