Brush C++ API
A flexible interpretable machine learning framework
Toggle main menu visibility
Loading...
Searching...
No Matches
evaluation.cpp
Go to the documentation of this file.
1
#include "
evaluation.h
"
2
3
namespace
Brush
{
4
namespace
Eval
{
5
6
7
// fitness of population
8
template
<ProgramType T>
9
void
Evaluation<T>::update_fitness
(
Population<T>
& pop,
10
int
island,
11
const
Dataset
& data,
12
const
Parameters
& params,
13
bool
fit,
14
bool
validation
15
)
16
{
17
auto
indices = pop.
get_island_indexes
(island);
18
19
for
(
unsigned
i = 0; i<indices.size(); ++i)
20
{
21
auto
& ind_ptr = pop.
individuals
.at(indices.at(i));
22
23
// Skip nullptr individuals (offspring slots not yet filled)
24
if
(!ind_ptr) {
25
HANDLE_ERROR_THROW
(fmt::format(
26
"Evaluation::update_fitness - attempted to update fitness of a nullptr. "
27
"This suggests population integrity was damaged by another manipulation method."
));
28
29
}
30
31
Individual<T>
& ind = *ind_ptr.get();
// we are modifying it, so operator[] wont work
32
33
if
(
false
)
// pass
34
{
35
ind.
fitness
.
set_loss
(
MAX_FLT
);
36
ind.
fitness
.
set_loss_v
(
MAX_FLT
);
37
38
ind.
error
=
MAX_FLT
*VectorXf::Ones(data.
y
.size());
39
}
40
else
41
{
42
// assign weights to individual
43
if
(fit && ind.
get_is_fitted
() ==
false
)
44
{
45
ind.
program
.
fit
(data.
get_training_data
());
46
}
47
48
assign_fit
(ind, data, params, validation);
49
}
50
}
51
}
52
53
// assign loss to program
54
template
<ProgramType T>
55
void
Evaluation<T>::assign_fit
(
Individual<T>
& ind,
const
Dataset
& data,
56
const
Parameters
& params,
bool
val)
57
{
58
VectorXf errors;
59
using
PT
=
ProgramType
;
60
61
Dataset
train = data.
get_training_data
();
62
float
f =
S
.score(ind, train, errors, params);
63
ind.
error
= errors;
64
65
float
f_v = f;
66
if
(data.
use_validation
) {
67
Dataset
validation = data.
get_validation_data
();
68
69
// when calculating validation score, we should not let
70
// it write in errors vector. That would avoid validation data leakage
71
VectorXf val_errors;
72
f_v =
S
.score(ind, validation, val_errors, params);
73
74
// if (val) // never use validation data here. This is used in lexicase selection
75
// ind.error = val_errors;
76
}
77
78
float
error_weight =
Individual<T>::weightsMap
[params.
scorer
];
79
if
(std::isnan(f) || std::isinf(f))
80
f = error_weight > 0 ? -
MAX_FLT
:
MAX_FLT
;
81
if
(std::isnan(f_v) || std::isinf(f_v))
82
f_v = error_weight > 0 ? -
MAX_FLT
:
MAX_FLT
;
83
84
// This is what is going to determine the weights for the individual's fitness.
85
// OBS: always use get_objectives, as it will replace the "scorer" string with
86
// the actual scorer function name
87
ind.
set_objectives
(params.
get_objectives
());
88
89
// when we use these setters, it updates its previous values references
90
ind.
fitness
.
set_loss
(f);
91
ind.
fitness
.
set_loss_v
(f_v);
92
ind.
fitness
.
set_size
(ind.
get_size
());
93
ind.
fitness
.
set_complexity
(ind.
get_complexity
());
94
ind.
fitness
.
set_linear_complexity
(ind.
get_linear_complexity
());
95
ind.
fitness
.
set_depth
(ind.
get_depth
());
96
97
vector<float> values;
98
values.resize(0);
99
100
// TODO: implement a better way of switching between train and val
101
// without the burden of calculating stuff everytime
102
for
(
const
auto
& n : ind.
get_objectives
())
103
{
104
// TODO: this should be done in the fitness class when calling wvalues() or values()
105
if
(n.compare(params.
scorer
)==0)
106
values.push_back(val ? f_v : f);
107
else
if
(n.compare(
"complexity"
)==0)
108
values.push_back(ind.
get_complexity
());
109
else
if
(n.compare(
"linear_complexity"
)==0)
110
values.push_back(ind.
get_linear_complexity
());
111
else
if
(n.compare(
"size"
)==0)
112
values.push_back(ind.
get_size
());
113
else
if
(n.compare(
"depth"
)==0)
114
values.push_back(ind.
get_depth
());
115
else
116
HANDLE_ERROR_THROW
(n+
" is not a known objective"
);
117
}
118
119
// will use inner attributes to set the fitness object
120
ind.
fitness
.
set_values
(values);
121
}
122
123
}
// Pop
124
}
// Brush
125
126
template
class
Brush::Eval::Evaluation<Brush::ProgramType::Regressor>
;
127
template
class
Brush::Eval::Evaluation<Brush::ProgramType::BinaryClassifier>
;
128
template
class
Brush::Eval::Evaluation<Brush::ProgramType::MulticlassClassifier>
;
129
template
class
Brush::Eval::Evaluation<Brush::ProgramType::Representer>
;
Brush::Data::Dataset
holds variable type data.
Definition
data.h:51
Brush::Data::Dataset::get_validation_data
Dataset get_validation_data() const
Definition
data.cpp:215
Brush::Data::Dataset::use_validation
bool use_validation
Definition
data.h:90
Brush::Data::Dataset::y
ArrayXf y
length N array, the target label
Definition
data.h:82
Brush::Data::Dataset::get_training_data
Dataset get_training_data() const
Definition
data.cpp:214
Brush::Eval::Evaluation
Class for evaluating the fitness of individuals in a population.
Definition
evaluation.h:27
Brush::Eval::Evaluation::update_fitness
void update_fitness(Population< T > &pop, int island, const Dataset &data, const Parameters ¶ms, bool fit=true, bool validation=true)
Update the fitness of individuals in a population.
Definition
evaluation.cpp:9
Brush::Eval::Evaluation::S
Scorer< T > S
Definition
evaluation.h:29
Brush::Eval::Evaluation::assign_fit
void assign_fit(Individual< T > &ind, const Dataset &data, const Parameters ¶ms, bool val=false)
Assign fitness to an individual.
Definition
evaluation.cpp:55
Brush::Pop::Individual
Definition
individual.h:15
Brush::Pop::Individual::weightsMap
static std::map< std::string, float > weightsMap
set parent ids using id values
Definition
individual.h:163
Brush::Pop::Individual::get_complexity
unsigned int get_complexity() const
Definition
individual.h:125
Brush::Pop::Individual::get_size
unsigned int get_size() const
Definition
individual.h:123
Brush::Pop::Individual::error
VectorXf error
training error (used in lexicase selectors)
Definition
individual.h:35
Brush::Pop::Individual::fitness
Fitness fitness
aggregate fitness score
Definition
individual.h:37
Brush::Pop::Individual::get_objectives
vector< string > get_objectives() const
Definition
individual.h:176
Brush::Pop::Individual::set_objectives
void set_objectives(vector< string > objs)
Definition
individual.h:177
Brush::Pop::Individual::get_depth
unsigned int get_depth() const
Definition
individual.h:124
Brush::Pop::Individual::get_linear_complexity
unsigned int get_linear_complexity() const
Definition
individual.h:126
Brush::Pop::Individual::program
Program< T > program
executable data structure
Definition
individual.h:17
Brush::Pop::Individual::get_is_fitted
bool get_is_fitted() const
Definition
individual.h:140
Brush::Pop::Population
Definition
population.h:12
Brush::Pop::Population::get_island_indexes
vector< size_t > get_island_indexes(int island)
Definition
population.h:39
Brush::Pop::Population::individuals
vector< std::shared_ptr< Individual< T > > > individuals
Definition
population.h:19
HANDLE_ERROR_THROW
#define HANDLE_ERROR_THROW(err)
Definition
error.h:27
evaluation.h
MAX_FLT
static float MAX_FLT
Definition
init.h:66
Brush
< nsga2 selection operator for getting the front
Definition
bandit.cpp:3
Brush::PT
ProgramType PT
Definition
program.h:39
Brush::ProgramType
ProgramType
Definition
types.h:70
Eval
Namespace containing scoring functions for evaluation metrics.
Brush::Fitness::set_linear_complexity
void set_linear_complexity(unsigned int new_lc)
Definition
fitness.h:80
Brush::Fitness::set_complexity
void set_complexity(unsigned int new_c)
Definition
fitness.h:75
Brush::Fitness::set_loss_v
void set_loss_v(float f_v)
Definition
fitness.h:67
Brush::Fitness::set_depth
void set_depth(unsigned int new_d)
Definition
fitness.h:85
Brush::Fitness::set_values
void set_values(vector< float > &v)
Definition
fitness.h:129
Brush::Fitness::set_size
void set_size(unsigned int new_s)
Definition
fitness.h:71
Brush::Fitness::set_loss
void set_loss(float f)
Definition
fitness.h:63
Brush::Parameters
Definition
params.h:20
Brush::Parameters::get_objectives
vector< string > get_objectives() const
Definition
params.h:148
Brush::Parameters::scorer
string scorer
actual loss function used, determined by error
Definition
params.h:66
Brush::Program::fit
Program< PType > & fit(const Dataset &d)
Definition
program.h:150
src
eval
evaluation.cpp
Generated by
1.17.0