Tree: ISlTreeNode;
Tree: Prognoz.Platform.Interop.Stat.ISlTreeNode;
The Tree property returns the created decision tree.
A decision tree is a hierarchical tree of rules, where each object corresponds to a single node giving the decision. A rule is a logical construction represented as "if... then ...".
To execute the example, add a link to the Stat system assembly.
Sub UserDecisionTree;
Var
dTree: SmDecisionTree;
expl, ex1, ex2: Array[12] Of Double;
res, i, j: Integer;
TreeNode: ISlTreeNode;
CatList: Array Of Integer;
S: String;
// Procedure of outputting the decision tree
Sub print(nodes: ISlTreeNodes);
Var
i: Integer;
Node: ISlTreeNode;
s: String;
Begin
For i := 0 To nodes.Count - 1 Do
Debug.Indent;
Node := nodes.Item(i);
s := "Value '" + Node.Value.ToString + "' ";
s := s + "in the series '" + Node.ExplanatorieIndex.ToString + "' ";
s := s + "has weight '" + Node.Weight.ToString + "' ";
s := s + "and support '" + Node.Instances.ToString + "'";
Debug.WriteLine(s);
print(nodes.Item(i).Children);
Debug.Unindent;
End For;
End Sub print;
Begin
dTree := New SmDecisionTree.Create;
// Set initial data
ex1[0] := 0; ex2[0] := 0; expl[0] := 0;
ex1[1] := 0; ex2[1] := 1; expl[1] := 1;
ex1[2] := 1; ex2[2] := 0; expl[2] := 2;
ex1[3] := 1; ex2[3] := 1; expl[3] := 3;
ex1[4] := 0; ex2[4] := 0; expl[4] := 0;
ex1[5] := 0; ex2[5] := 1; expl[5] := 1;
ex1[6] := 1; ex2[6] := 0; expl[6] := 2;
ex1[7] := 1; ex2[7] := 1; expl[7] := 3;
ex1[8] := 1; ex2[8] := 1; expl[8] := Integer.MinValue;
ex1[9] := 1; ex2[9] := 0; expl[9] := Integer.MinValue;
ex1[10] := 1; ex2[10] := 0; expl[10] := Integer.MinValue;
ex1[11] := 1; ex2[11] := 1; expl[11] := Integer.MinValue;
// Set explained series
dTree.Dependent.Value := expl;
// Define explanatory series
dTree.Explanatories.Add.Value := ex1;
dTree.Explanatories.Add.Value := ex2;
// Run calculation and show results
res := dTree.Execute;
If res <> 0 Then
Debug.WriteLine(dTree.Errors);
Else
Debug.WriteLine("Initial values; Processed values;");
For i := 0 To 11 Do
Debug.Write(dTree.Dependent.Value[i].ToString + " ");
Debug.WriteLine(dTree.FilledDependent.Value[i]);
End For;
// Output decision tree
TreeNode := dTree.Tree;
If TreeNode.Parent = Null Then
Debug.WriteLine("Decision tree:");
print(TreeNode.Children);
End If;
// Display list of categories
CatList := dTree.CategoriesList;
If CatList.Length > 0 Then
Debug.WriteLine("List of categories:"); Debug.Indent;
For i := 0 To CatList.Length - 1 Do
Debug.WriteLine(CatList[i]);
End For;
Debug.Unindent;
End If;
Debug.WriteLine("Summary results of classification:");
Debug.Indent;
s := "";
For i := 0 To dTree.ClassificationSummary.GetUpperBound(1) Do
For j := 0 To dTree.ClassificationSummary.GetUpperBound(2) Do
s := s + dTree.ClassificationSummary[i, j].ToString + " ";
End For;
Debug.WriteLine(s);
s := "";
End For;
Debug.Unindent;
Debug.WriteLine("Results of training set classification:");
Debug.Indent;
For i := 0 To dTree.FilledLearningSample.GetUpperBound(1) Do
Debug.WriteLine(dTree.FilledLearningSample[i]);
End For;
Debug.Unindent;
End If;
End Sub UserDecisionTree;
After executing the example the console window displays missing data treatment results, decision tree and list of categories.
The requirements and result of the Fore.NET example execution match with those in the Fore example.
Imports Prognoz.Platform.Interop.Stat;
…
// Procedure of outputting decision tree
Public Shared Sub print(nodes: ISlTreeNodes);
Var
i: Integer;
Node: ISlTreeNode;
s: String;
Begin
For i := 0 To nodes.Count - 1 Do
System.Diagnostics.Debug.Indent();
Node := nodes.Item[i];
s := "Value '" + Node.Value.ToString() + "' ";
s := s + "in series '" + Node.ExplanatorieIndex.ToString() + "' ";
s := s + "has weight '" + Node.Weight.ToString() + "' ";
s := s + "and support '" + Node.Instances.ToString() + "'";
System.Diagnostics.Debug.WriteLine(s);
print(nodes.Item[i].Children);
System.Diagnostics.Debug.Unindent();
End For;
End Sub print;
Public Shared Sub UserDecisionTree();
Var
dTree: SmDecisionTree;
expl, ex1, ex2: Array[12] Of Double;
res, i, j: Integer;
TreeNode: ISlTreeNode;
CatList: System.Array;
s: String;
Begin
dTree := New SmDecisionTree.Create();
// Set initial data
ex1[0] := 0; ex2[0] := 0; expl[0] := 0;
ex1[1] := 0; ex2[1] := 1; expl[1] := 1;
ex1[2] := 1; ex2[2] := 0; expl[2] := 2;
ex1[3] := 1; ex2[3] := 1; expl[3] := 3;
ex1[4] := 0; ex2[4] := 0; expl[4] := 0;
ex1[5] := 0; ex2[5] := 1; expl[5] := 1;
ex1[6] := 1; ex2[6] := 0; expl[6] := 2;
ex1[7] := 1; ex2[7] := 1; expl[7] := 3;
ex1[8] := 1; ex2[8] := 1; expl[8] := Integer.MinValue;
ex1[9] := 1; ex2[9] := 0; expl[9] := Integer.MinValue;
ex1[10] := 1; ex2[10] := 0; expl[10] := Integer.MinValue;
ex1[11] := 1; ex2[11] := 1; expl[11] := Integer.MinValue;
// Set explained series
dTree.Dependent.Value := expl;
// Define explanatory series
dTree.Explanatories.Add().Value := ex1;
dTree.Explanatories.Add().Value := ex2;
// Run calculation and show results
res := dTree.Execute();
If res <> 0 Then
System.Diagnostics.Debug.WriteLine(dTree.Errors);
Else
System.Diagnostics.Debug.WriteLine("Initial values; Processed values;");
For i := 0 To 11 Do
System.Diagnostics.Debug.Write(dTree.Dependent.Value.GetValue(i) + " ");
System.Diagnostics.Debug.WriteLine(dTree.FinallyExplained.GetValue(i));
End For;
// Output decision tree
TreeNode := dTree.Tree;
If TreeNode.Parent = Null Then
System.Diagnostics.Debug.WriteLine("Decision tree:");
print(TreeNode.Children);
End If;
// Display list of categories
CatList := dTree.CategoriesList;
If CatList.Length > 0 Then
System.Diagnostics.Debug.WriteLine("List of categories:");
System.Diagnostics.Debug.Indent();
For i := 0 To CatList.Length - 1 Do
System.Diagnostics.Debug.WriteLine(CatList[i]);
End For;
System.Diagnostics.Debug.Unindent();
End If;
System.Diagnostics.Debug.WriteLine("Summary results of classification:");
System.Diagnostics.Debug.Indent();
s := "";
For i := 0 To dTree.ClassificationSummary.GetUpperBound(1) Do
For j := 0 To dTree.ClassificationSummary.GetUpperBound(0) Do
s := s + dTree.ClassificationSummary.GetValue(i, j).ToString() + " ";
End For;
System.Diagnostics.Debug.WriteLine(s);
s := "";
End For;
System.Diagnostics.Debug.Unindent();
System.Diagnostics.Debug.WriteLine("Results of training set classification:");
System.Diagnostics.Debug.Indent();
For i := 0 To dTree.FilledLearningSample.GetUpperBound(0) Do
System.Diagnostics.Debug.WriteLine(dTree.FilledLearningSample.GetValue(i));
End For;
System.Diagnostics.Debug.Unindent();
End If;
End Sub UserDecisionTree;
See also: