CVB++ 15.0
regression_test_result.hpp
1#pragma once
2
3#include "../_cexports/c_polimago.h"
4
5#include "../global.hpp"
6#include "../string.hpp"
7#include "test_result_base.hpp"
8
9#include <vector>
10#include <memory>
11
12namespace Cvb
13{
14 CVB_BEGIN_INLINE_NS
15
17 namespace Polimago
18 {
20 namespace Testing
21 {
22
24
26 class RegressionTestResult : public TestResultBase
27 {
28 private:
29 explicit RegressionTestResult(ReleaseObjectGuard &&guard)
30 : TestResultBase(std::move(guard))
31 {
32 auto numExamples = NumExamples();
33 auto dimension = RegressionDimension();
34 for (decltype(numExamples) i = 0; i < numExamples; ++i)
35 {
36 std::vector<double> targetValuesPerExample;
37 for (decltype(dimension) j = 0; j < dimension; ++j)
38 {
39 auto targetValue = CVB_CALL_CAPI(PMGetTestResultTargetValue(Handle(), i, j));
40 targetValuesPerExample.push_back(targetValue);
41 }
42 targetValues_.push_back(targetValuesPerExample);
43 }
44
45 for (decltype(numExamples) i = 0; i < numExamples; ++i)
46 {
47 std::vector<double> predictionResultsPerExample;
48 for (decltype(dimension) j = 0; j < dimension; ++j)
49 {
50 auto predictionResult = CVB_CALL_CAPI(PMGetTestResultNumericalPrediction(Handle(), i, j));
51 predictionResultsPerExample.push_back(predictionResult);
52 }
53 predictionResults_.push_back(predictionResultsPerExample);
54 }
55 }
56
57 std::string ObjectName() const override
58 {
59 return thisObjectName_;
60 }
61
62 public:
64
68 explicit RegressionTestResult(const String &fileName)
69 : RegressionTestResult(ReleaseObjectGuard(LoadInternal(fileName)))
70 {
71 if (CVB_CALL_CAPI(PMGetTestResultNumClasses(Handle())) != 0)
72 {
73 throw std::runtime_error("Loading the RegressionTestResult failed");
74 }
75 }
76
78
85 static std::unique_ptr<RegressionTestResult> FromHandle(ReleaseObjectGuard &&guard)
86 {
87 if (!guard.Handle())
88 {
89 throw std::invalid_argument("invalid regression test result native handle");
90 }
91 return std::unique_ptr<RegressionTestResult>(new RegressionTestResult(std::move(guard)));
92 }
93
95
101 {
102 return std::make_unique<RegressionTestResult>(fileName);
103 }
104
106
111 {
112 return static_cast<int>(CVB_CALL_CAPI(PMGetTestResultOutputDimension(Handle())));
113 }
114
116
121 {
122 return targetValues_;
123 }
124
126
131 {
132 return predictionResults_;
133 }
134
135 private:
136 std::vector<std::vector<double>> targetValues_;
137 std::vector<std::vector<double>> predictionResults_;
138 const std::string thisObjectName_ = "Polimago Regression Test Result";
139 };
140
143
144 } /* namespace Testing */
145
148
149 } /* namespace Polimago */
150 CVB_END_INLINE_NS
151} /* namespace Cvb */
void * Handle() const noexcept
Classic API Polimago handle.
Definition predictor_base.hpp:68
Regression test result object.
Definition regression_test_result.hpp:27
std::vector< std::vector< double > > PredictedValues() const
Prediction results for example.
Definition regression_test_result.hpp:130
std::vector< std::vector< double > > TargetValues() const
Target values for each example.
Definition regression_test_result.hpp:120
RegressionTestResult(const String &fileName)
Load a saved regression test result from a file.
Definition regression_test_result.hpp:68
int RegressionDimension() const
Dimension of the regression results.
Definition regression_test_result.hpp:110
static std::unique_ptr< RegressionTestResult > Load(const String &fileName)
Load a saved test result from a file.
Definition regression_test_result.hpp:100
static std::unique_ptr< RegressionTestResult > FromHandle(ReleaseObjectGuard &&guard)
Creates test result from a classic API handle.
Definition regression_test_result.hpp:85
int NumExamples() const
Number of examples that contributed to this test result.
Definition test_result_base.hpp:61
T move(T... args)
Namespace for the Polimago package testing functionality.
Definition classification_test_result.hpp:21
std::shared_ptr< RegressionTestResult > RegressionTestResultPtr
Convenience shared pointer for RegressionTestResult.
Definition regression_test_result.hpp:142
Namespace for the Polimago package.
Definition classification_predictor.hpp:38
Root namespace for the Image Manager interface.
Definition c_bayer_to_rgb.h:17
std::string String
String for wide characters or unicode characters.
Definition string.hpp:49