aGrUM  0.20.3
a C++ library for (probabilistic) graphical models
gum::learning::KNML< ALLOC > Class Template Reference

the class for computing the NML penalty used by 3off2 More...

#include <kNML.h>

+ Inheritance diagram for gum::learning::KNML< ALLOC >:
+ Collaboration diagram for gum::learning::KNML< ALLOC >:

Public Member Functions

Constructors / Destructors
 KNML (const DBRowGeneratorParser< ALLOC > &parser, const Apriori< ALLOC > &apriori, const std::vector< std::pair< std::size_t, std::size_t >, ALLOC< std::pair< std::size_t, std::size_t > > > &ranges, const Bijection< NodeId, std::size_t, ALLOC< std::size_t > > &nodeId2columns=Bijection< NodeId, std::size_t, ALLOC< std::size_t > >(), const allocator_type &alloc=allocator_type())
 default constructor More...
 
 KNML (const DBRowGeneratorParser< ALLOC > &parser, const Apriori< ALLOC > &apriori, const Bijection< NodeId, std::size_t, ALLOC< std::size_t > > &nodeId2columns=Bijection< NodeId, std::size_t, ALLOC< std::size_t > >(), const allocator_type &alloc=allocator_type())
 default constructor More...
 
 KNML (const KNML< ALLOC > &from)
 copy constructor More...
 
 KNML (const KNML< ALLOC > &from, const allocator_type &alloc)
 copy constructor with a given allocator More...
 
 KNML (KNML< ALLOC > &&from)
 move constructor More...
 
 KNML (KNML< ALLOC > &&from, const allocator_type &alloc)
 move constructor with a given allocator More...
 
virtual KNML< ALLOC > * clone () const
 virtual copy constructor More...
 
virtual KNML< ALLOC > * clone (const allocator_type &alloc) const
 virtual copy constructor with a given allocator More...
 
virtual ~KNML ()
 destructor More...
 
Operators
KNML< ALLOC > & operator= (const KNML< ALLOC > &from)
 copy operator More...
 
KNML< ALLOC > & operator= (KNML< ALLOC > &&from)
 move operator More...
 
Accessors / Modifiers
virtual void clear ()
 clears all the data structures from memory, including the C_n^r cache More...
 
virtual void clearCache ()
 clears the current C_n^r cache More...
 
virtual void useCache (const bool on_off)
 turn on/off the use of the C_n^r cache More...
 

Public Types

using allocator_type = ALLOC< NodeId >
 type for the allocators passed in arguments of methods More...
 

Protected Member Functions

virtual double score_ (const IdCondSet< ALLOC > &idset) final
 returns the score for a given IdCondSet More...
 

Detailed Description

template<template< typename > class ALLOC = std::allocator>
class gum::learning::KNML< ALLOC >

the class for computing the NML penalty used by 3off2

Definition at line 49 of file kNML.h.

Member Typedef Documentation

◆ allocator_type

template<template< typename > class ALLOC = std::allocator>
using gum::learning::KNML< ALLOC >::allocator_type = ALLOC< NodeId >

type for the allocators passed in arguments of methods

Definition at line 52 of file kNML.h.

Constructor & Destructor Documentation

◆ KNML() [1/6]

template<template< typename > class ALLOC = std::allocator>
gum::learning::KNML< ALLOC >::KNML ( const DBRowGeneratorParser< ALLOC > &  parser,
const Apriori< ALLOC > &  apriori,
const std::vector< std::pair< std::size_t, std::size_t >, ALLOC< std::pair< std::size_t, std::size_t > > > &  ranges,
const Bijection< NodeId, std::size_t, ALLOC< std::size_t > > &  nodeId2columns = BijectionNodeId, std::size_t, ALLOC< std::size_t > >(),
const allocator_type alloc = allocator_type() 
)

default constructor

Parameters
parserthe parser used to parse the database
aprioriAn apriori that we add to the computation of the score (this should come from expert knowledge): this consists in adding numbers to countings in the contingency tables
rangesa set of pairs {(X1,Y1),...,(Xn,Yn)} of database's rows indices. The countings are then performed only on the union of the rows [Xi,Yi), i in {1,...,n}. This is useful, e.g, when performing cross validation tasks, in which part of the database should be ignored. An empty set of ranges is equivalent to an interval [X,Y) ranging over the whole database.
nodeId2Columnsa mapping from the ids of the nodes in the graphical model to the corresponding column in the DatabaseTable parsed by the parser. This enables estimating from a database in which variable A corresponds to the 2nd column the parameters of a BN in which variable A has a NodeId of 5. An empty nodeId2Columns bijection means that the mapping is an identity, i.e., the value of a NodeId is equal to the index of the column in the DatabaseTable.
allocthe allocator used to allocate the structures within the Score.
Warning
If nodeId2columns is not empty, then only the scores over the ids belonging to this bijection can be computed: applying method score() over other ids will raise exception NotFound.

◆ KNML() [2/6]

template<template< typename > class ALLOC = std::allocator>
gum::learning::KNML< ALLOC >::KNML ( const DBRowGeneratorParser< ALLOC > &  parser,
const Apriori< ALLOC > &  apriori,
const Bijection< NodeId, std::size_t, ALLOC< std::size_t > > &  nodeId2columns = BijectionNodeId, std::size_t, ALLOC< std::size_t > >(),
const allocator_type alloc = allocator_type() 
)

default constructor

Parameters
parserthe parser used to parse the database
aprioriAn apriori that we add to the computation of the score (this should come from expert knowledge): this consists in adding numbers to countings in the contingency tables
nodeId2Columnsa mapping from the ids of the nodes in the graphical model to the corresponding column in the DatabaseTable parsed by the parser. This enables estimating from a database in which variable A corresponds to the 2nd column the parameters of a BN in which variable A has a NodeId of 5. An empty nodeId2Columns bijection means that the mapping is an identity, i.e., the value of a NodeId is equal to the index of the column in the DatabaseTable.
allocthe allocator used to allocate the structures within the Score.
Warning
If nodeId2columns is not empty, then only the scores over the ids belonging to this bijection can be computed: applying method score() over other ids will raise exception NotFound.

◆ KNML() [3/6]

template<template< typename > class ALLOC = std::allocator>
gum::learning::KNML< ALLOC >::KNML ( const KNML< ALLOC > &  from)

copy constructor

◆ KNML() [4/6]

template<template< typename > class ALLOC = std::allocator>
gum::learning::KNML< ALLOC >::KNML ( const KNML< ALLOC > &  from,
const allocator_type alloc 
)

copy constructor with a given allocator

◆ KNML() [5/6]

template<template< typename > class ALLOC = std::allocator>
gum::learning::KNML< ALLOC >::KNML ( KNML< ALLOC > &&  from)

move constructor

◆ KNML() [6/6]

template<template< typename > class ALLOC = std::allocator>
gum::learning::KNML< ALLOC >::KNML ( KNML< ALLOC > &&  from,
const allocator_type alloc 
)

move constructor with a given allocator

◆ ~KNML()

template<template< typename > class ALLOC = std::allocator>
virtual gum::learning::KNML< ALLOC >::~KNML ( )
virtual

destructor

Member Function Documentation

◆ clear()

template<template< typename > class ALLOC = std::allocator>
virtual void gum::learning::KNML< ALLOC >::clear ( )
virtual

clears all the data structures from memory, including the C_n^r cache

Reimplemented from gum::learning::IndependenceTest< ALLOC >.

◆ clearCache()

template<template< typename > class ALLOC = std::allocator>
virtual void gum::learning::KNML< ALLOC >::clearCache ( )
virtual

clears the current C_n^r cache

Reimplemented from gum::learning::IndependenceTest< ALLOC >.

◆ clearRanges()

template<template< typename > class ALLOC = std::allocator>
void gum::learning::IndependenceTest< ALLOC >::clearRanges ( )
inherited

reset the ranges to the one range corresponding to the whole database

◆ clone() [1/2]

template<template< typename > class ALLOC = std::allocator>
virtual KNML< ALLOC >* gum::learning::KNML< ALLOC >::clone ( ) const
virtual

virtual copy constructor

Implements gum::learning::IndependenceTest< ALLOC >.

◆ clone() [2/2]

template<template< typename > class ALLOC = std::allocator>
virtual KNML< ALLOC >* gum::learning::KNML< ALLOC >::clone ( const allocator_type alloc) const
virtual

virtual copy constructor with a given allocator

Implements gum::learning::IndependenceTest< ALLOC >.

◆ database()

template<template< typename > class ALLOC = std::allocator>
const DatabaseTable< ALLOC >& gum::learning::IndependenceTest< ALLOC >::database ( ) const
inherited

return the database used by the score

◆ getAllocator()

template<template< typename > class ALLOC = std::allocator>
allocator_type gum::learning::IndependenceTest< ALLOC >::getAllocator ( ) const
inherited

returns the allocator used by the score

◆ marginalize_()

template<template< typename > class ALLOC = std::allocator>
std::vector< double, ALLOC< double > > gum::learning::IndependenceTest< ALLOC >::marginalize_ ( const std::size_t  node_2_marginalize,
const std::size_t  X_size,
const std::size_t  Y_size,
const std::size_t  Z_size,
const std::vector< double, ALLOC< double > > &  N_xyz 
) const
protectedinherited

returns a counting vector where variables are marginalized from N_xyz

Parameters
node_2_marginalizeindicates which node(s) shall be marginalized:
  • 0 means that X should be marginalized
  • 1 means that Y should be marginalized
  • 2 means that Z should be marginalized
X_sizethe domain size of variable X
Y_sizethe domain size of variable Y
Z_sizethe domain size of the set of conditioning variables Z
N_xyza counting vector of dimension X * Y * Z (in this order)

◆ minNbRowsPerThread()

template<template< typename > class ALLOC = std::allocator>
virtual std::size_t gum::learning::IndependenceTest< ALLOC >::minNbRowsPerThread ( ) const
virtualinherited

returns the minimum of rows that each thread should process

◆ nbThreads()

template<template< typename > class ALLOC = std::allocator>
virtual std::size_t gum::learning::IndependenceTest< ALLOC >::nbThreads ( ) const
virtualinherited

returns the number of threads used to parse the database

◆ nodeId2Columns()

template<template< typename > class ALLOC = std::allocator>
const Bijection< NodeId, std::size_t, ALLOC< std::size_t > >& gum::learning::IndependenceTest< ALLOC >::nodeId2Columns ( ) const
inherited

return the mapping between the columns of the database and the node ids

Warning
An empty nodeId2Columns bijection means that the mapping is an identity, i.e., the value of a NodeId is equal to the index of the column in the DatabaseTable.

◆ operator=() [1/2]

template<template< typename > class ALLOC = std::allocator>
KNML< ALLOC >& gum::learning::KNML< ALLOC >::operator= ( const KNML< ALLOC > &  from)

copy operator

◆ operator=() [2/2]

template<template< typename > class ALLOC = std::allocator>
KNML< ALLOC >& gum::learning::KNML< ALLOC >::operator= ( KNML< ALLOC > &&  from)

move operator

◆ ranges()

template<template< typename > class ALLOC = std::allocator>
const std::vector< std::pair< std::size_t, std::size_t >, ALLOC< std::pair< std::size_t, std::size_t > > >& gum::learning::IndependenceTest< ALLOC >::ranges ( ) const
inherited

returns the current ranges

◆ score() [1/2]

template<template< typename > class ALLOC = std::allocator>
double gum::learning::IndependenceTest< ALLOC >::score ( const NodeId  var1,
const NodeId  var2 
)
inherited

returns the score of a pair of nodes

◆ score() [2/2]

template<template< typename > class ALLOC = std::allocator>
double gum::learning::IndependenceTest< ALLOC >::score ( const NodeId  var1,
const NodeId  var2,
const std::vector< NodeId, ALLOC< NodeId > > &  rhs_ids 
)
inherited

returns the score of a pair of nodes given some other nodes

Parameters
var1the first variable on the left side of the conditioning bar
var2the second variable on the left side of the conditioning bar
rhs_idsthe set of variables on the right side of the conditioning bar

◆ score_()

template<template< typename > class ALLOC = std::allocator>
virtual double gum::learning::KNML< ALLOC >::score_ ( const IdCondSet< ALLOC > &  idset)
finalprotectedvirtual

returns the score for a given IdCondSet

Exceptions
OperationNotAllowedis raised if the score does not support calling method score such an idset (due to too many/too few variables in the left hand side or the right hand side of the idset).

Implements gum::learning::IndependenceTest< ALLOC >.

◆ setMaxNbThreads()

template<template< typename > class ALLOC = std::allocator>
virtual void gum::learning::IndependenceTest< ALLOC >::setMaxNbThreads ( std::size_t  nb) const
virtualinherited

changes the max number of threads used to parse the database

◆ setMinNbRowsPerThread()

template<template< typename > class ALLOC = std::allocator>
virtual void gum::learning::IndependenceTest< ALLOC >::setMinNbRowsPerThread ( const std::size_t  nb) const
virtualinherited

changes the number min of rows a thread should process in a multithreading context

When computing score, several threads are used by record counters to perform countings on the rows of the database, the MinNbRowsPerThread method indicates how many rows each thread should at least process. This is used to compute the number of threads actually run. This number is equal to the min between the max number of threads allowed and the number of records in the database divided by nb.

◆ setRanges()

template<template< typename > class ALLOC = std::allocator>
template<template< typename > class XALLOC>
void gum::learning::IndependenceTest< ALLOC >::setRanges ( const std::vector< std::pair< std::size_t, std::size_t >, XALLOC< std::pair< std::size_t, std::size_t > > > &  new_ranges)
inherited

sets new ranges to perform the countings used by the independence test

Parameters
rangesa set of pairs {(X1,Y1),...,(Xn,Yn)} of database's rows indices. The countings are then performed only on the union of the rows [Xi,Yi), i in {1,...,n}. This is useful, e.g, when performing cross validation tasks, in which part of the database should be ignored. An empty set of ranges is equivalent to an interval [X,Y) ranging over the whole database.

◆ useCache()

template<template< typename > class ALLOC = std::allocator>
virtual void gum::learning::KNML< ALLOC >::useCache ( const bool  on_off)
virtual

turn on/off the use of the C_n^r cache

Reimplemented from gum::learning::IndependenceTest< ALLOC >.

Member Data Documentation

◆ apriori_

template<template< typename > class ALLOC = std::allocator>
Apriori< ALLOC >* gum::learning::IndependenceTest< ALLOC >::apriori_ {nullptr}
protectedinherited

the expert knowledge a priori we add to the contingency tables

Definition at line 215 of file independenceTest.h.

◆ cache_

template<template< typename > class ALLOC = std::allocator>
ScoringCache< ALLOC > gum::learning::IndependenceTest< ALLOC >::cache_
protectedinherited

the scoring cache

Definition at line 221 of file independenceTest.h.

◆ counter_

template<template< typename > class ALLOC = std::allocator>
RecordCounter< ALLOC > gum::learning::IndependenceTest< ALLOC >::counter_
protectedinherited

the record counter used for the countings over discrete variables

Definition at line 218 of file independenceTest.h.

◆ empty_ids_

template<template< typename > class ALLOC = std::allocator>
const std::vector< NodeId, ALLOC< NodeId > > gum::learning::IndependenceTest< ALLOC >::empty_ids_
protectedinherited

an empty vector

Definition at line 227 of file independenceTest.h.

◆ one_log2_

template<template< typename > class ALLOC = std::allocator>
const double gum::learning::IndependenceTest< ALLOC >::one_log2_ {M_LOG2E}
protectedinherited

1 / log(2)

Definition at line 212 of file independenceTest.h.

◆ use_cache_

template<template< typename > class ALLOC = std::allocator>
bool gum::learning::IndependenceTest< ALLOC >::use_cache_ {true}
protectedinherited

a Boolean indicating whether we wish to use the cache

Definition at line 224 of file independenceTest.h.


The documentation for this class was generated from the following file: