/
MachineEvaluation.cpp
106 lines (87 loc) · 2.83 KB
/
MachineEvaluation.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
/*
* This software is distributed under BSD 3-clause license (see LICENSE file).
*
* Authors: Jacob Walker, Heiko Strathmann, Giovanni De Toni
*/
#include <shogun/evaluation/CrossValidation.h>
#include <shogun/evaluation/Evaluation.h>
#include <shogun/evaluation/MachineEvaluation.h>
#include <shogun/evaluation/SplittingStrategy.h>
#include <shogun/machine/Machine.h>
#include <shogun/mathematics/Statistics.h>
#include <rxcpp/rx-lite.hpp>
#include <shogun/lib/Signal.h>
#include <utility>
using namespace shogun;
MachineEvaluation::MachineEvaluation()
{
init();
}
MachineEvaluation::MachineEvaluation(std::shared_ptr<Machine> machine, std::shared_ptr<Features> features,
std::shared_ptr<Labels> labels, std::shared_ptr<SplittingStrategy> splitting_strategy,
std::shared_ptr<Evaluation> evaluation_criterion, bool autolock)
{
init();
m_machine = std::move(machine);
m_features = std::move(features);
m_labels = std::move(labels);
m_splitting_strategy = std::move(splitting_strategy);
m_evaluation_criterion = std::move(evaluation_criterion);
}
MachineEvaluation::MachineEvaluation(std::shared_ptr<Machine> machine, std::shared_ptr<Labels> labels,
std::shared_ptr<SplittingStrategy> splitting_strategy,
std::shared_ptr<Evaluation> evaluation_criterion, bool autolock)
{
init();
m_machine = std::move(machine);
m_labels = std::move(labels);
m_splitting_strategy = std::move(splitting_strategy);
m_evaluation_criterion = std::move(evaluation_criterion);
}
MachineEvaluation::~MachineEvaluation()
{
}
void MachineEvaluation::init()
{
m_machine = NULL;
m_features = NULL;
m_labels = NULL;
m_splitting_strategy = NULL;
m_evaluation_criterion = NULL;
m_cancel_computation = false;
m_pause_computation_flag = false;
SG_ADD(&m_machine, kMachine, "Used learning machine");
SG_ADD(&m_features, kFeatures, "Used features");
SG_ADD(&m_labels, kLabels, "Used labels");
SG_ADD(&m_splitting_strategy, kSplittingStrategy,
"Used splitting strategy");
SG_ADD(&m_evaluation_criterion, kEvaluationCriterion,
"Used evaluation criterion");
}
std::shared_ptr<EvaluationResult> MachineEvaluation::evaluate() const
{
SG_TRACE("entering {}::evaluate()", get_name());
require(
m_machine, "{}::evaluate() is only possible if a machine is "
"attached",
get_name());
require(
m_features, "{}::evaluate() is only possible if features are "
"attached",
get_name());
require(
m_labels, "{}::evaluate() is only possible if labels are "
"attached",
get_name());
auto result = evaluate_impl();
SG_TRACE("leaving {}::evaluate()", get_name());
return result;
};
std::shared_ptr<Machine> MachineEvaluation::get_machine() const
{
return m_machine;
}
EEvaluationDirection MachineEvaluation::get_evaluation_direction() const
{
return m_evaluation_criterion->get_evaluation_direction();
}