1 #ifndef GRAIL_NOMINAL_INNER_DECISION_NODE_H
2 #define GRAIL_NOMINAL_INNER_DECISION_NODE_H
4 #include "DecisionNode.h"
5 #include <unordered_map>
14 template <
class TDecisionType>
26 void SetDefaultDecision(std::unique_ptr< TDecisionType> decision)
28 defaultDecision = std::move(decision);
33 children[key] = std::move(node);
36 void Print(std::unordered_map<int, std::string>& columnNames,
const std::string& indent)
const override
38 if (columnNames.find(columnIndex) == columnNames.end())
39 columnNames[columnIndex] =
"Column[" + std::to_string(columnIndex) +
"]";
41 for(
auto& child : children)
43 std::cout << indent << columnNames.at(columnIndex) <<
" = " << child.first << std::endl;
44 child.second->Print(columnNames, indent +
" ");
48 const TDecisionType* Predict(std::vector<float>& data)
const final
50 auto it = children.find(data[columnIndex]);
51 if (it != children.end())
53 return it->second->Predict(data);
55 return defaultDecision.get();
58 DecisionNodeType GetNodeType()
const final
60 return DecisionNodeType::NOMINAL_INNER;
63 std::unordered_map<float, std::unique_ptr<DecisionNode<TDecisionType>>> children;
65 std::unique_ptr<TDecisionType> defaultDecision =
nullptr;
Class for internal usage.
Definition: NominalInnerDecisionNode.h:16
Class for internal usage. Decision tree node base type.
Definition: DecisionNode.h:21
A base class for an object that is passed to Serialize() and Deserialize() methods of DecisionTree....
Definition: IDecisionTreeSerializer.hh:21