def BuildTree(DF, Splitter, Parent): flag = 0 ## To Store if Current Node is a Leaf if (len(DF.keys()) == 1): ## No Attribute Left to Split on flag = 1 if ((Parent != None) and (Parent.depth == Max_Depth)): ## Maximum Depth Reached flag = 2 if (CalcNode(DF, Splitter)[-1] == 0): ## Current Node is Perfectly Classified flag = 3 if (flag == 0): Split_Attr = BestAttr(DF, Splitter) Parent.split = Split_Attr Attr_Val = np.unique(DF[Split_Attr]) for val in Attr_Val: Decision_Node = Node(Split_Attr, parent=Parent, value=val, split=None, child={}, outcome=None) Parent.child[val] = Decision_Node Leaf, Outcome = BuildTree( DF[DF[Split_Attr] == val].reset_index(drop=True), Splitter, Decision_Node) if (Leaf == None): Decision_Node.outcome = Outcome else: Val, Count = np.unique(DF[Class], return_counts=True) Outcome = Val[np.argmax(Count)] return None, Outcome return Parent, None
def BuildTree(Parent, Splitter, Max_Depth): if not Parent.is_leaf: for subtree in Parent.children: BuildTree(subtree, Splitter, Max_Depth) return Parent, None flag = 0 ## To Store if Current Node is a Leaf if (len(Parent.df.keys()) == 1): ## No Attribute Left to Split on flag = 1 if (not (Parent.is_root) and (Parent.depth == Max_Depth)): ## Maximum Depth Reached flag = 2 if (CalcNode(Parent.df[Class].values, Splitter)[-1] == 0): ## Current Node is Perfectly Classified flag = 3 if (flag == 0): Split_Attr = BestAttr(Parent.df, Splitter) Parent.split = Split_Attr Attr_Val, Inv_Index = np.unique(Parent.df[Split_Attr], return_inverse=True) Hash = np.zeros(shape=(len(Attr_Val), len(Parent.df)), dtype=bool) for i in range(len(Parent.df)): Hash[Inv_Index[i], i] = True for i in range(len(Attr_Val)): Decision_Node = Node(Split_Attr, parent=Parent, df=Parent.df[Hash[i]], value=Attr_Val[i], split=None, child={}, outcome=None) Parent.child[Attr_Val[i]] = Decision_Node Leaf, Outcome = BuildTree(Decision_Node, Splitter, Max_Depth) if (Leaf == None): Decision_Node.outcome = Outcome else: Val, Count = np.unique(Parent.df[Class], return_counts=True) Outcome = Val[np.argmax(Count)] return None, Outcome return Parent, None