aGrUM  0.16.0
gum::TreeRegress< GUM_SCALAR, COMBINEOPERATOR, PROJECTOPERATOR, TerminalNodePolicy > Class Template Reference

Class used to perform Decision Tree Regression in the FMDP Framework. More...

#include <agrum/multidim/patterns/treeRegress.h>

+ Collaboration diagram for gum::TreeRegress< GUM_SCALAR, COMBINEOPERATOR, PROJECTOPERATOR, TerminalNodePolicy >:

Public Member Functions

Constructors / Destructors
 TreeRegress (const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > *qAction, const Bijection< const DiscreteVariable *, const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * > pxi)
 Default constructor. More...
 
 ~TreeRegress ()
 Default destructor. More...
 
Main Method
MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * compute ()
 Computes and builds the Function Graph that is the result of the operation. More...
 

Detailed Description

template<typename GUM_SCALAR, template< typename > class COMBINEOPERATOR, template< typename > class PROJECTOPERATOR, template< typename > class TerminalNodePolicy = ExactTerminalNodePolicy>
class gum::TreeRegress< GUM_SCALAR, COMBINEOPERATOR, PROJECTOPERATOR, TerminalNodePolicy >

Class used to perform Decision Tree Regression in the FMDP Framework.

Definition at line 55 of file treeRegress.h.

Constructor & Destructor Documentation

◆ TreeRegress()

template<typename GUM_SCALAR , template< typename > class COMBINEOPERATOR, template< typename > class PROJECTOPERATOR, template< typename > class TerminalNodePolicy>
gum::TreeRegress< GUM_SCALAR, COMBINEOPERATOR, PROJECTOPERATOR, TerminalNodePolicy >::TreeRegress ( const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > *  qAction,
const Bijection< const DiscreteVariable *, const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * >  pxi 
)

Default constructor.

Definition at line 48 of file treeRegress_tpl.h.

References gum::TreeRegress< GUM_SCALAR, COMBINEOPERATOR, PROJECTOPERATOR, TerminalNodePolicy >::~TreeRegress().

52  :
53  __vFunc(qAction),
54  __pxi(pxi) {
55  GUM_CONSTRUCTOR(TreeRegress);
56  }
TreeRegress(const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > *qAction, const Bijection< const DiscreteVariable *, const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * > pxi)
Default constructor.
const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * __vFunc
The function graphs used for the operation.
Definition: treeRegress.h:90
const Bijection< const DiscreteVariable *, const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > *> __pxi
Definition: treeRegress.h:94
+ Here is the call graph for this function:

◆ ~TreeRegress()

template<typename GUM_SCALAR , template< typename > class COMBINEOPERATOR, template< typename > class PROJECTOPERATOR, template< typename > class TerminalNodePolicy>
gum::TreeRegress< GUM_SCALAR, COMBINEOPERATOR, PROJECTOPERATOR, TerminalNodePolicy >::~TreeRegress ( )

Default destructor.

Definition at line 66 of file treeRegress_tpl.h.

Referenced by gum::TreeRegress< GUM_SCALAR, COMBINEOPERATOR, PROJECTOPERATOR, TerminalNodePolicy >::TreeRegress().

66  {
67  GUM_DESTRUCTOR(TreeRegress);
68  }
TreeRegress(const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > *qAction, const Bijection< const DiscreteVariable *, const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * > pxi)
Default constructor.
+ Here is the caller graph for this function:

Member Function Documentation

◆ __xPloreVFunc()

template<typename GUM_SCALAR , template< typename > class COMBINEOPERATOR, template< typename > class PROJECTOPERATOR, template< typename > class TerminalNodePolicy>
MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * gum::TreeRegress< GUM_SCALAR, COMBINEOPERATOR, PROJECTOPERATOR, TerminalNodePolicy >::__xPloreVFunc ( NodeId  currentNodeId)
private

The whatever 1.

Definition at line 106 of file treeRegress_tpl.h.

References gum::TreeRegress< GUM_SCALAR, COMBINEOPERATOR, PROJECTOPERATOR, TerminalNodePolicy >::__context, gum::TreeRegress< GUM_SCALAR, COMBINEOPERATOR, PROJECTOPERATOR, TerminalNodePolicy >::__pxi, gum::TreeRegress< GUM_SCALAR, COMBINEOPERATOR, PROJECTOPERATOR, TerminalNodePolicy >::__vFunc, gum::TreeOperator< GUM_SCALAR, COMBINEOPERATOR, TerminalNodePolicy >::compute(), gum::DiscreteVariable::domainSize(), gum::InternalNode::nodeVar(), and gum::InternalNode::son().

Referenced by gum::TreeRegress< GUM_SCALAR, COMBINEOPERATOR, PROJECTOPERATOR, TerminalNodePolicy >::compute().

106  {
107  const InternalNode* currentNode = __vFunc->node(currentNodeId);
108 
109  std::vector< MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy >* >
110  varbucket;
111 
112  for (Idx moda = 0; moda < currentNode->nodeVar()->domainSize(); ++moda) {
113  MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy >* vpxi = nullptr;
114  __context.insert(currentNode->nodeVar(), moda);
115  if (__vFunc->isTerminalNode(currentNode->son(moda))) {
116  GUM_SCALAR value = __vFunc->nodeValue(currentNode->son(moda));
117  if (value) {
118  vpxi = MultiDimFunctionGraph< GUM_SCALAR,
119  TerminalNodePolicy >::getTreeInstance();
120  vpxi->manager()->setRootNode(vpxi->manager()->addTerminalNode(value));
121  }
122  } else {
123  vpxi = __xPloreVFunc(currentNode->son(moda));
124  }
125 
126  if (vpxi != nullptr) {
127  TreeOperator< GUM_SCALAR, COMBINEOPERATOR > combinope(
128  vpxi, __pxi.second(currentNode->nodeVar()), __context);
129  varbucket.push_back(combinope.compute());
130  }
131  delete vpxi;
132  __context.erase(currentNode->nodeVar());
133  }
134 
135  if (varbucket.empty()) return nullptr;
136 
137  MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy >* vp = varbucket.back();
138  varbucket.pop_back();
139  while (!varbucket.empty()) {
140  MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy >* temp = vp;
141  TreeOperator< GUM_SCALAR, PROJECTOPERATOR > projope(vp, varbucket.back());
142  vp = projope.compute();
143  delete temp;
144  temp = varbucket.back();
145  varbucket.pop_back();
146  delete temp;
147  }
148 
149  return vp;
150  }
const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * __vFunc
The function graphs used for the operation.
Definition: treeRegress.h:90
const Bijection< const DiscreteVariable *, const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > *> __pxi
Definition: treeRegress.h:94
HashTable< const DiscreteVariable *, Idx > __context
Definition: treeRegress.h:95
MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * __xPloreVFunc(NodeId currentNodeId)
The whatever 1.
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ compute()

template<typename GUM_SCALAR , template< typename > class COMBINEOPERATOR, template< typename > class PROJECTOPERATOR, template< typename > class TerminalNodePolicy>
MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * gum::TreeRegress< GUM_SCALAR, COMBINEOPERATOR, PROJECTOPERATOR, TerminalNodePolicy >::compute ( )

Computes and builds the Function Graph that is the result of the operation.

Definition at line 83 of file treeRegress_tpl.h.

References gum::TreeRegress< GUM_SCALAR, COMBINEOPERATOR, PROJECTOPERATOR, TerminalNodePolicy >::__vFunc, and gum::TreeRegress< GUM_SCALAR, COMBINEOPERATOR, PROJECTOPERATOR, TerminalNodePolicy >::__xPloreVFunc().

Referenced by gum::TreeOperatorStrategy< GUM_SCALAR >::regress().

83  {
84  MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy >* ret;
85  if (__vFunc->isTerminalNode(__vFunc->root())) {
86  ret = MultiDimFunctionGraph< GUM_SCALAR,
87  TerminalNodePolicy >::getTreeInstance();
88  ret->copy(*__vFunc);
89  } else
90  ret = __xPloreVFunc(__vFunc->root());
91  return ret;
92  }
const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * __vFunc
The function graphs used for the operation.
Definition: treeRegress.h:90
MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * __xPloreVFunc(NodeId currentNodeId)
The whatever 1.
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

Member Data Documentation

◆ __context

template<typename GUM_SCALAR, template< typename > class COMBINEOPERATOR, template< typename > class PROJECTOPERATOR, template< typename > class TerminalNodePolicy = ExactTerminalNodePolicy>
HashTable< const DiscreteVariable*, Idx > gum::TreeRegress< GUM_SCALAR, COMBINEOPERATOR, PROJECTOPERATOR, TerminalNodePolicy >::__context
private

◆ __pxi

template<typename GUM_SCALAR, template< typename > class COMBINEOPERATOR, template< typename > class PROJECTOPERATOR, template< typename > class TerminalNodePolicy = ExactTerminalNodePolicy>
const Bijection< const DiscreteVariable*, const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy >* > gum::TreeRegress< GUM_SCALAR, COMBINEOPERATOR, PROJECTOPERATOR, TerminalNodePolicy >::__pxi
private

◆ __vFunc

template<typename GUM_SCALAR, template< typename > class COMBINEOPERATOR, template< typename > class PROJECTOPERATOR, template< typename > class TerminalNodePolicy = ExactTerminalNodePolicy>
const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy >* gum::TreeRegress< GUM_SCALAR, COMBINEOPERATOR, PROJECTOPERATOR, TerminalNodePolicy >::__vFunc
private

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