Loading...
Searching...
No Matches
evaluation.h
Go to the documentation of this file.
1// SPDX-License-Identifier: AGPL-3.0-only
2// Copyright (C) 2026 Artificial Intelligence Techniques, S.L. and Roberto López González
3
4#pragma once
5
7
8namespace opennn
9{
10
11class Dataset;
12class Network;
13
14struct Descriptives;
15struct Histogram;
16struct Correlation;
17
25
27{
28public:
29
30 explicit Evaluation(Network* = nullptr, Dataset* = nullptr);
31
33 {
34 float determination = 0.0f;
37
38 void set(const VectorR&, const VectorR&, float);
39 void save(const filesystem::path&) const;
40 void print() const;
41 };
42
44 {
49
50 void print() const;
51 };
52
60
62 {
63 float minimum = 0.0f;
64 float maximum = 0.0f;
65 float mean = 0.0f;
67 };
68
69 const Network* get_network() const { return network; }
70 const Dataset* get_dataset() const { return dataset; }
71 void set_network(Network* new_network) { network = new_network; }
72 void set_dataset(Dataset* new_dataset) { dataset = new_dataset; }
73 void set_batch_size(Index new_batch_size) { batch_size = new_batch_size; }
74 void check() const;
75 pair<MatrixR, MatrixR> get_targets_and_outputs(const string& sample_role) const;
76
77 // Regression errors and fit.
80 vector<vector<Descriptives>> calculate_error_data_descriptives() const;
81 vector<Histogram> calculate_error_data_histograms(const Index = 10) const;
82 VectorR calculate_errors(const MatrixR&, const MatrixR&) const;
83 VectorR calculate_errors(const string&) const;
84 float calculate_determination(const VectorR&, const VectorR&) const;
85 Tensor<GoodnessOfFitAnalysis, 1> perform_goodness_of_fit_analysis() const;
87
88 // Reconstruction and anomaly detection.
94
95 // Classification metrics, confusion counts and original sample IDs.
96 VectorR calculate_binary_classification_errors(const string& sample_role) const
97 { return calculate_classification_errors(sample_role, true); }
98 VectorR calculate_multiple_classification_errors(const string& sample_role) const
99 { return calculate_classification_errors(sample_role, false); }
104 MatrixI calculate_confusion(const MatrixR&, const MatrixR&, float = 0.50) const;
105 MatrixI calculate_confusion(const float = 0.50) const;
108
109 vector<Index> calculate_true_positive_samples(const MatrixR& targets, const MatrixR& outputs,
110 const vector<Index>& indices, float threshold) const
111 { return filter_classification_samples(targets, outputs, indices, threshold, ConfusionCell::TruePositive); }
112 vector<Index> calculate_false_positive_samples(const MatrixR& targets, const MatrixR& outputs,
113 const vector<Index>& indices, float threshold) const
114 { return filter_classification_samples(targets, outputs, indices, threshold, ConfusionCell::FalsePositive); }
115 vector<Index> calculate_false_negative_samples(const MatrixR& targets, const MatrixR& outputs,
116 const vector<Index>& indices, float threshold) const
117 { return filter_classification_samples(targets, outputs, indices, threshold, ConfusionCell::FalseNegative); }
118 vector<Index> calculate_true_negative_samples(const MatrixR& targets, const MatrixR& outputs,
119 const vector<Index>& indices, float threshold) const
120 { return filter_classification_samples(targets, outputs, indices, threshold, ConfusionCell::TrueNegative); }
121
122 Tensor<VectorI, 2> calculate_multiple_classification_rates() const;
123 Tensor<VectorI, 2> calculate_multiple_classification_rates(const MatrixR&, const MatrixR&, const vector<Index>&) const;
124
125 // Ranking curves.
130 float calculate_area_under_curve_confidence_limit(float, Index, Index) const;
135
136private:
137
138 vector<Index> filter_classification_samples(const MatrixR&, const MatrixR&, const vector<Index>&, float,
139 ConfusionCell) const;
140
141 VectorR calculate_classification_errors(const string&, bool binary) const;
142
143 Network* network = nullptr;
144 Dataset* dataset = nullptr;
145 Index batch_size = 0;
146};
147
148}
Definition dataset.h:48
MatrixI calculate_confusion(const float=0.50) const
MatrixR perform_lift_chart_analysis() const
vector< Index > calculate_false_positive_samples(const MatrixR &targets, const MatrixR &outputs, const vector< Index > &indices, float threshold) const
Definition evaluation.h:112
MatrixR calculate_roc_curve(const MatrixR &, const MatrixR &) const
float calculate_determination(const VectorR &, const VectorR &) const
float calculate_anomaly_threshold(const ReconstructionErrorStatistics &, float=1.0f) const
VectorR calculate_binary_classification_tests(const MatrixR &, const MatrixR &, float=0.50) const
const Network * get_network() const
Definition evaluation.h:69
Tensor< VectorI, 2 > calculate_multiple_classification_rates() const
MatrixR calculate_cumulative_gain(const MatrixR &, const MatrixR &) const
pair< MatrixR, MatrixR > get_targets_and_outputs(const string &sample_role) const
void set_batch_size(Index new_batch_size)
Definition evaluation.h:73
vector< vector< Descriptives > > calculate_error_data_descriptives() const
Tensor3 calculate_error_data() const
const Dataset * get_dataset() const
Definition evaluation.h:70
MatrixR calculate_lift_chart(const MatrixR &) const
float calculate_optimal_threshold(const MatrixR &) const
VectorR calculate_binary_classification_tests(const float=0.50) const
void set_network(Network *new_network)
Definition evaluation.h:71
BinaryClassificationRates calculate_binary_classification_rates(const float=0.50) const
MatrixR calculate_percentage_error_data() const
VectorR calculate_reconstruction_errors(const string &) const
Tensor< GoodnessOfFitAnalysis, 1 > perform_goodness_of_fit_analysis() const
void set_dataset(Dataset *new_dataset)
Definition evaluation.h:72
VectorI calculate_anomaly_predictions(const VectorR &, float) const
VectorR calculate_reconstruction_errors(const MatrixR &, const MatrixR &) const
VectorR calculate_multiple_classification_errors(const string &sample_role) const
Definition evaluation.h:98
Tensor< VectorI, 2 > calculate_multiple_classification_rates(const MatrixR &, const MatrixR &, const vector< Index > &) const
vector< Index > calculate_true_positive_samples(const MatrixR &targets, const MatrixR &outputs, const vector< Index > &indices, float threshold) const
Definition evaluation.h:109
VectorR calculate_binary_classification_errors(const string &sample_role) const
Definition evaluation.h:96
VectorR calculate_errors(const MatrixR &, const MatrixR &) const
float calculate_area_under_curve_confidence_limit(float, Index, Index) const
void print_goodness_of_fit_analysis() const
RocAnalysis perform_roc_analysis() const
vector< Index > calculate_false_negative_samples(const MatrixR &targets, const MatrixR &outputs, const vector< Index > &indices, float threshold) const
Definition evaluation.h:115
VectorI calculate_positives_negatives_rate(const MatrixR &, const MatrixR &) const
Evaluation(Network *=nullptr, Dataset *=nullptr)
void check() const
VectorR calculate_errors(const string &) const
vector< Histogram > calculate_error_data_histograms(const Index=10) const
float calculate_area_under_curve(const MatrixR &) const
ReconstructionErrorStatistics calculate_reconstruction_error_statistics(const VectorR &) const
void print_multiple_classification_tests() const
MatrixI calculate_confusion(const MatrixR &, const MatrixR &, float=0.50) const
void print_binary_classification_tests() const
float calculate_area_under_curve_confidence_limit(const MatrixR &, const MatrixR &) const
vector< Index > calculate_true_negative_samples(const MatrixR &targets, const MatrixR &outputs, const vector< Index > &indices, float threshold) const
Definition evaluation.h:118
Definition network.h:87
Definition configuration.h:10
ConfusionCell
Definition evaluation.h:19
@ FalsePositive
Definition evaluation.h:21
@ TruePositive
Definition evaluation.h:20
@ FalseNegative
Definition evaluation.h:22
@ TrueNegative
Definition evaluation.h:23
Eigen::Matrix< float, Eigen::Dynamic, 1 > VectorR
Definition opennn_types.h:335
Eigen::Matrix< float, Eigen::Dynamic, Eigen::Dynamic, Layout > MatrixR
Definition opennn_types.h:331
Eigen::Matrix< Index, Eigen::Dynamic, Eigen::Dynamic, Layout > MatrixI
Definition opennn_types.h:332
Eigen::Tensor< float, 3, Layout|Eigen::AlignedMax > Tensor3
Definition opennn_types.h:352
Eigen::Matrix< Index, Eigen::Dynamic, 1 > VectorI
Definition opennn_types.h:336
Definition correlations.h:12
Definition statistics.h:12
vector< Index > true_negatives_indices
Definition evaluation.h:58
vector< Index > true_positives_indices
Definition evaluation.h:55
vector< Index > false_negatives_indices
Definition evaluation.h:57
vector< Index > false_positives_indices
Definition evaluation.h:56
VectorR outputs
Definition evaluation.h:36
float determination
Definition evaluation.h:34
void save(const filesystem::path &) const
void set(const VectorR &, const VectorR &, float)
VectorR targets
Definition evaluation.h:35
float maximum
Definition evaluation.h:64
float minimum
Definition evaluation.h:63
float population_standard_deviation
Definition evaluation.h:66
Definition evaluation.h:44
float area_under_curve
Definition evaluation.h:46
MatrixR roc_curve
Definition evaluation.h:45
float optimal_threshold
Definition evaluation.h:48
float confidence_limit
Definition evaluation.h:47
Definition statistics.h:56