Loading...
Searching...
No Matches
variable.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
8
9namespace opennn
10{
11
13
15{
16 static const EnumMap<VariableType> map{
17 {VariableType::None, "None"},
18 {VariableType::Numeric, "Numeric"},
19 {VariableType::Binary, "Binary"},
20 {VariableType::Integer, "Integer"},
21 {VariableType::Categorical, "Categorical"},
22 {VariableType::DateTime, "DateTime"},
23 {VariableType::Constant, "Constant"}
24 };
25 return map;
26}
27
29{
31}
32
33inline VariableType string_to_variable_type(string_view name)
34{
35 return variable_type_map().from_string(name);
36}
37
47
49{
50 static const EnumMap<ScalerMethod> map{
51 {ScalerMethod::None, "None"},
52 {ScalerMethod::MinimumMaximum, "MinimumMaximum"},
53 {ScalerMethod::MeanStandardDeviation, "MeanStandardDeviation"},
54 {ScalerMethod::StandardDeviation, "StandardDeviation"},
55 {ScalerMethod::Logarithm, "Logarithm"},
56 {ScalerMethod::ImageMinMax, "ImageMinMax"}
57 };
58 return map;
59}
60
61inline const string& scaler_method_to_string(ScalerMethod method)
62{
63 return scaler_method_map().to_string(method);
64}
65
66inline ScalerMethod string_to_scaler_method(string_view name)
67{
68 return scaler_method_map().from_string(name);
69}
70
81
83{
84 static const EnumMap<VariableRole> map{
85 {VariableRole::None, "None"},
86 {VariableRole::Input, "Input"},
87 {VariableRole::Target, "Target"},
88 {VariableRole::Decoder, "Decoder"},
89 {VariableRole::InputTarget, "InputTarget"},
90 {VariableRole::Time, "Time"},
91 {VariableRole::Evaluation, "Evaluation"}
92 };
93 return map;
94}
95
96inline const string& variable_role_to_string(VariableRole role)
97{
98 return variable_role_map().to_string(role);
99}
100
101inline VariableRole string_to_variable_role(string_view name)
102{
103 if (name == "Id") return VariableRole::None;
104 return variable_role_map().from_string(name);
105}
106
107inline bool role_applies_to(VariableRole actual, VariableRole query)
108{
109 return actual == query
110 || (actual == VariableRole::InputTarget && (query == VariableRole::Input || query == VariableRole::Target));
111}
112
114{
115 Variable(const string& = {},
116 const string& = "None",
118 const string& = "MeanStandardDeviation",
119 const vector<string>& = {});
120
121 void set(const string& = {},
122 const string& = "None",
124 const string& = "MeanStandardDeviation",
125 const vector<string>& = {});
126
127 string name;
130 vector<string> categories;
132
133 Index features = 1;
134 const string& get_role() const { return variable_role_to_string(role); }
135 VariableRole get_role_type() const noexcept { return role; }
136 const string& get_scaler() const { return scaler_method_to_string(scaler); }
137 ScalerMethod get_scaler_type() const noexcept { return scaler; }
138 const string& get_type_string() const { return variable_type_to_string(type); }
139 Index get_categories_number() const { return ssize(categories); }
140
141 void set_scaler(const string& new_scaler) { scaler = string_to_scaler_method(new_scaler); }
142 void set_scaler(ScalerMethod new_scaler) { scaler = new_scaler; }
143 void set_role(const string& new_role) { role = string_to_variable_role(new_role); }
144 void set_role(VariableRole new_role) { role = new_role; }
145 void set_type(const string& new_variable_type) { type = string_to_variable_type(new_variable_type); }
146 void set_categories(const vector<string>& new_categories) { categories = new_categories; }
147
148 void to_JSON(JsonWriter&) const;
149
150 bool is_binary() const noexcept { return type == VariableType::Binary; }
151 bool is_categorical() const noexcept { return type == VariableType::Categorical; }
152 bool is_used() const noexcept
153 {
154 return role != VariableRole::None
157 }
158
160
161 vector<string> get_names() const;
162
163};
164
165vector<string> get_variable_feature_names(const vector<Variable>&);
166
167// Name and first feature index of every single-feature variable.
168vector<pair<string, Index>> get_variable_columns(const vector<Variable>&);
169
170// First feature index and width of every multi-feature categorical variable.
171vector<pair<Index, Index>> get_categorical_blocks(const vector<Variable>&);
172
173inline vector<Index> get_feature_dimensions(const vector<Variable>& variables)
174{
175 vector<Index> dimensions(variables.size());
176 ranges::transform(variables, dimensions.begin(),
177 [](const Variable& variable) { return variable.get_feature_count(); });
178 return dimensions;
179}
180
181inline Index get_features_number(const vector<Variable>& variables)
182{
183 Index count = 0;
184 for (const Variable& variable : variables)
185 count += variable.get_feature_count();
186 return count;
187}
188
189}
Definition enum_map.h:15
const string & to_string(Enum value) const
Definition enum_map.h:31
Definition evaluation.h:27
Definition json.h:92
Definition configuration.h:10
vector< pair< Index, Index > > get_categorical_blocks(const vector< Variable > &)
VariableRole string_to_variable_role(string_view name)
Definition variable.h:101
const EnumMap< ScalerMethod > & scaler_method_map()
Definition variable.h:48
VariableRole
Definition variable.h:72
@ InputTarget
Definition variable.h:77
@ Input
Definition variable.h:74
@ None
Definition variable.h:73
@ Time
Definition variable.h:78
@ Evaluation
Definition variable.h:79
@ Target
Definition variable.h:75
@ Decoder
Definition variable.h:76
const EnumMap< VariableRole > & variable_role_map()
Definition variable.h:82
vector< string > get_variable_feature_names(const vector< Variable > &)
ScalerMethod
Definition variable.h:39
@ MeanStandardDeviation
Definition variable.h:42
@ Logarithm
Definition variable.h:44
@ StandardDeviation
Definition variable.h:43
@ None
Definition variable.h:40
@ MinimumMaximum
Definition variable.h:41
@ ImageMinMax
Definition variable.h:45
VariableType string_to_variable_type(string_view name)
Definition variable.h:33
const string & variable_role_to_string(VariableRole role)
Definition variable.h:96
bool role_applies_to(VariableRole actual, VariableRole query)
Definition variable.h:107
Index get_features_number(const vector< Variable > &variables)
Definition variable.h:181
const EnumMap< VariableType > & variable_type_map()
Definition variable.h:14
VariableType
Definition variable.h:12
@ Categorical
Definition variable.h:12
@ None
Definition variable.h:12
@ Binary
Definition variable.h:12
@ Numeric
Definition variable.h:12
@ DateTime
Definition variable.h:12
@ Integer
Definition variable.h:12
@ Constant
Definition variable.h:12
const string & scaler_method_to_string(ScalerMethod method)
Definition variable.h:61
const string & variable_type_to_string(VariableType type)
Definition variable.h:28
ScalerMethod string_to_scaler_method(string_view name)
Definition variable.h:66
float type
Definition opennn_types.h:197
vector< pair< string, Index > > get_variable_columns(const vector< Variable > &)
vector< Index > get_feature_dimensions(const vector< Variable > &variables)
Definition variable.h:173
Definition variable.h:114
Index get_feature_count() const
Definition variable.h:159
const string & get_role() const
Definition variable.h:134
void set_type(const string &new_variable_type)
Definition variable.h:145
Variable(const string &={}, const string &="None", const VariableType &=VariableType::Numeric, const string &="MeanStandardDeviation", const vector< string > &={})
void set_categories(const vector< string > &new_categories)
Definition variable.h:146
bool is_categorical() const noexcept
Definition variable.h:151
string name
Definition variable.h:127
Index get_categories_number() const
Definition variable.h:139
bool is_used() const noexcept
Definition variable.h:152
void set_scaler(ScalerMethod new_scaler)
Definition variable.h:142
void set_role(VariableRole new_role)
Definition variable.h:144
ScalerMethod get_scaler_type() const noexcept
Definition variable.h:137
void to_JSON(JsonWriter &) const
vector< string > get_names() const
void set(const string &={}, const string &="None", const VariableType &=VariableType::Numeric, const string &="MeanStandardDeviation", const vector< string > &={})
vector< string > categories
Definition variable.h:130
const string & get_type_string() const
Definition variable.h:138
void set_scaler(const string &new_scaler)
Definition variable.h:141
void set_role(const string &new_role)
Definition variable.h:143
VariableRole role
Definition variable.h:128
ScalerMethod scaler
Definition variable.h:131
Index features
Definition variable.h:133
bool is_binary() const noexcept
Definition variable.h:150
VariableType type
Definition variable.h:129
const string & get_scaler() const
Definition variable.h:136
VariableRole get_role_type() const noexcept
Definition variable.h:135