aGrUM 2.3.2
a C++ library for (probabilistic) graphical models
score.h
Go to the documentation of this file.
1/****************************************************************************
2 * This file is part of the aGrUM/pyAgrum library. *
3 * *
4 * Copyright (c) 2005-2025 by *
5 * - Pierre-Henri WUILLEMIN(_at_LIP6) *
6 * - Christophe GONZALES(_at_AMU) *
7 * *
8 * The aGrUM/pyAgrum library is free software; you can redistribute it *
9 * and/or modify it under the terms of either : *
10 * *
11 * - the GNU Lesser General Public License as published by *
12 * the Free Software Foundation, either version 3 of the License, *
13 * or (at your option) any later version, *
14 * - the MIT license (MIT), *
15 * - or both in dual license, as here. *
16 * *
17 * (see https://agrum.gitlab.io/articles/dual-licenses-lgplv3mit.html) *
18 * *
19 * This aGrUM/pyAgrum library is distributed in the hope that it will be *
20 * useful, but WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, *
21 * INCLUDING BUT NOT LIMITED TO THE WARRANTIES MERCHANTABILITY or FITNESS *
22 * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE *
23 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER *
24 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, *
25 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR *
26 * OTHER DEALINGS IN THE SOFTWARE. *
27 * *
28 * See LICENCES for more details. *
29 * *
30 * SPDX-FileCopyrightText: Copyright 2005-2025 *
31 * - Pierre-Henri WUILLEMIN(_at_LIP6) *
32 * - Christophe GONZALES(_at_AMU) *
33 * SPDX-License-Identifier: LGPL-3.0-or-later OR MIT *
34 * *
35 * Contact : info_at_agrum_dot_org *
36 * homepage : http://agrum.gitlab.io *
37 * gitlab : https://gitlab.com/agrumery/agrum *
38 * *
39 ****************************************************************************/
40
41
47#ifndef GUM_LEARNING_SCORE_H
48#define GUM_LEARNING_SCORE_H
49
50#include <utility>
51
52#include <agrum/agrum.h>
53
58
59namespace gum {
60
61 namespace learning {
62
69 public:
70 // ##########################################################################
72 // ##########################################################################
74
76
96 const Prior& external_prior,
97 const std::vector< std::pair< std::size_t, std::size_t > >& ranges,
98 const Bijection< NodeId, std::size_t >& nodeId2columns
100
101
103
117 const Prior& external_prior,
118 const Bijection< NodeId, std::size_t >& nodeId2columns
120
122 virtual Score* clone() const = 0;
123
125 virtual ~Score();
126
128
129
130 // ##########################################################################
132 // ##########################################################################
134
136
140 virtual void setNumberOfThreads(Size nb);
141
143 virtual Size getNumberOfThreads() const;
144
146 virtual bool isGumNumberOfThreadsOverriden() const;
147
157 virtual void setMinNbRowsPerThread(const std::size_t nb) const;
158
160 virtual std::size_t minNbRowsPerThread() const;
161
163
169 void setRanges(const std::vector< std::pair< std::size_t, std::size_t > >& new_ranges);
170
173
175 const std::vector< std::pair< std::size_t, std::size_t > >& ranges() const;
176
178 double score(const NodeId var);
179
181
184 double score(const NodeId var, const std::vector< NodeId >& rhs_ids);
185
187 void clear();
188
191
193 void useCache(const bool on_off);
194
196 bool isUsingCache() const;
197
199
203
205 const DatabaseTable& database() const;
206
208
215 virtual std::string isPriorCompatible() const = 0;
216
218
228 virtual const Prior& internalPrior() const = 0;
229
231
232
233 protected:
235 const double one_log2_{M_LOG2E};
236
238 Prior* prior_{nullptr};
239
242
245
247 bool use_cache_{true};
248
250 const std::vector< NodeId > empty_ids_;
251
252
254 Score(const Score& from);
255
257 Score(Score&& from);
258
260 Score& operator=(const Score& from);
261
264
266
269 virtual double score_(const IdCondSet& idset) = 0;
270
272
276 std::vector< double > marginalize_(const NodeId X_id,
277 const std::vector< double >& N_xyz) const;
278 };
279
280 } /* namespace learning */
281
282} /* namespace gum */
283
284// include the inlined functions if necessary
285#ifndef GUM_NO_INLINE
287#endif /* GUM_NO_INLINE */
288
289#endif /* GUM_LEARNING_SCORE_H */
the class used to read a row in the database and to transform it into a set of DBRow instances that c...
The class representing a tabular database as used by learning tasks.
A class for storing a pair of sets of NodeIds, the second one corresponding to a conditional set.
Definition idCondSet.h:214
the base class for all a priori
Definition prior.h:83
The class that computes counting of observations from the database.
Prior * prior_
the expert knowledge a priorwe add to the score
Definition score.h:238
virtual std::string isPriorCompatible() const =0
indicates whether the prior is compatible (meaningful) with the score
virtual bool isGumNumberOfThreadsOverriden() const
indicates whether the user set herself the number of threads
void clearRanges()
reset the ranges to the one range corresponding to the whole database
virtual ~Score()
destructor
const std::vector< std::pair< std::size_t, std::size_t > > & ranges() const
returns the current ranges
void clear()
clears all the data structures from memory, including the cache
virtual const Prior & internalPrior() const =0
returns the internal prior of the score
double score(const NodeId var)
returns the score of a single node
Score(const DBRowGeneratorParser &parser, const Prior &external_prior, const Bijection< NodeId, std::size_t > &nodeId2columns=Bijection< NodeId, std::size_t >())
default constructor
virtual Size getNumberOfThreads() const
returns the current max number of threads of the scheduler
Score(Score &&from)
move constructor
const DatabaseTable & database() const
return the database used by the score
Score & operator=(const Score &from)
copy operator
virtual std::size_t minNbRowsPerThread() const
returns the minimum of rows that each thread should process
const Bijection< NodeId, std::size_t > & nodeId2Columns() const
return the mapping between the columns of the database and the node ids
const std::vector< NodeId > empty_ids_
an empty vector
Definition score.h:250
RecordCounter counter_
the record counter used for the counts over discrete variables
Definition score.h:241
double score(const NodeId var, const std::vector< NodeId > &rhs_ids)
returns the score of a single node given some other nodes
bool isUsingCache() const
indicates whether the score uses a cache
const double one_log2_
1 / log(2)
Definition score.h:235
Score(const Score &from)
copy constructor
void setRanges(const std::vector< std::pair< std::size_t, std::size_t > > &new_ranges)
sets new ranges to perform the counts used by the score
virtual double score_(const IdCondSet &idset)=0
returns the score for a given IdCondSet
std::vector< double > marginalize_(const NodeId X_id, const std::vector< double > &N_xyz) const
returns a counting vector where variables are marginalized from N_xyz
bool use_cache_
a Boolean indicating whether we wish to use the cache
Definition score.h:247
ScoringCache cache_
the scoring cache
Definition score.h:244
virtual void setNumberOfThreads(Size nb)
sets the number max of threads that can be used
virtual void setMinNbRowsPerThread(const std::size_t nb) const
changes the number min of rows a thread should process in a multithreading context
virtual Score * clone() const =0
virtual copy constructor
Score(const DBRowGeneratorParser &parser, const Prior &external_prior, const std::vector< std::pair< std::size_t, std::size_t > > &ranges, const Bijection< NodeId, std::size_t > &nodeId2columns=Bijection< NodeId, std::size_t >())
default constructor
void clearCache()
clears the current cache
void useCache(const bool on_off)
turn on/off the use of a cache of the previously computed score
Score & operator=(Score &&from)
move operator
a cache for caching scores and independence tests results
the classes to account for structure changes in a graph
std::size_t Size
In aGrUM, hashed values are unsigned long int.
Definition types.h:74
Size NodeId
Type for node ids.
#define M_LOG2E
Definition math_utils.h:55
include the inlined functions if necessary
Definition CSVParser.h:54
gum is the global namespace for all aGrUM entities
Definition agrum.h:46
the base class for all a priori
The class that computes counting of observations from the database.
the base class for all the scores used for learning (BIC, BDeu, etc)
a cache for caching scores and independence tests results