Value: Double;
Value: double;
The Value property returns the checked value.
To get the number of explanatory series, by which node is divided, use the IBinaryTreeNode.ExplanatorieIndex property.
If criterion is categorical, Value returns empty value.
Add a link to the Stat system assembly.
Sub UserProc;
Var
rf: SmRandomForest;
Y: Array[16] Of Integer;
X1,X2: Array[16] Of Double;
res, i: Integer;
Explanatories: ISlSeries;
Explan: ISlSerie;
Forest: IBinaryTreeForest;
TreeNode: IBinaryTreeNode;
Begin
rf := New SmRandomForest.Create;
// Set explained series
Y[00] := 0; Y[08] := 1;
Y[01] := 1; Y[09] := 0;
Y[02] := 0; Y[10] := 2;
Y[03] := 2; Y[11] := 2;
Y[04] := 1; Y[12] := 1;
Y[05] := 1; Y[13] := 2;
Y[06] := 2; Y[14] := 0;
Y[07] := 1; Y[15] := 2;
rf.Dependent := Y;
// Set explanatory series (integer)
X1[00] := 34.13; X1[08] := 29.27;
X1[01] := 21.52; X1[09] := 23.39;
X1[02] := 25.43; X1[10] := 28.28;
X1[03] := 43.42; X1[11] := 43.55;
X1[04] := 40.19; X1[12] := 44.80;
X1[05] := 24.97; X1[13] := 23.23;
X1[06] := 20.57; X1[14] := 37.14;
X1[07] := 30.81; X1[15] := 27.44;
Explanatories := rf.ExplanatoriesContinuous;
Explanatories.Clear;
Explan := Explanatories.Add;
Explan.Id := "Continuous_X1";
Explan.Name := "X1";
Explan.Value := X1;
X2[00] := 13; X2[08] := 91.27;
X2[01] := 1.5; X2[09] := 43.39;
X2[02] := 25; X2[10] := 68.28;
X2[03] := 4.42; X2[11] := 0.55;
X2[04] := 40.9; X2[12] := 2.80;
X2[05] := 45.97; X2[13] := 1.23;
X2[06] := 13.57; X2[14] := 37.14;
X2[07] := 0.81; X2[15] := 5.44;
Explan := Explanatories.Add;
Explan.Id := "Continuous_X2";
Explan.Name := "X2";
Explan.Value := X2;
// Forest size
rf.ForestSize := 5;
// Trees size
rf.TreeSizeSpecification.MaximumNumberOfLevels := 2;
rf.TreeSizeSpecification.MinimumNumberOfCases := 1;
// Perform calculation and display error messages
res:=rf.Execute;
If (res = 0) Then
Forest := rf.Forest;
Debug.WriteLine("Number of trees in ensemble: "+Forest.Count.ToString);
For i := 0 To Forest.Count - 1 Do
TreeNode := Forest.Item(i);
Debug.WriteLine("Tree "+(i+1).ToString);
Debug.WriteLine(" Root node");
print(TreeNode);
End For;
Else
Debug.WriteLine(rf.Errors);
End If;
End Sub UserProc;
…
Sub print(node: IBinaryTreeNode);
Var
i: integer;
Categorical: Boolean = False;
Begin
Debug.WriteLine(" Number of node in tree: " + node.NodeIndex.ToString);
If node.Parent <> Null Then
Debug.WriteLine(" Root node: " + node.Parent.Name);
End If;
Debug.WriteLine(" Number of observations in node: " + node.Total.ToString);
Debug.WriteLine(" Classifying variable name: " + node.Name);
Debug.WriteLine(" Explanatory series number: " + node.ExplanatorieIndex.ToString);
Debug.WriteLine(" Improvement coefficient: " + node.Improvement.ToString);
Debug.Write(" Classifying variable type: ");
Select Case node.PropertyType
Case
DecisionTreePropertyType.Categorical: Debug.WriteLine("categorical");
Categorical := True;
Case DecisionTreePropertyType.NoProperty: Debug.WriteLine("-");
Case DecisionTreePropertyType.Ordered: Debug.WriteLine("ordinal");
Case DecisionTreePropertyType.Value: Debug.WriteLine("quantitative");
End Select;
If Not Categorical Then
Debug.WriteLine(" Verified value: " + node.Value.ToString);
End If;
For i := 0 To node.Categories.Length - 1 Do
Debug.WriteLine(" Category: " + node.Categories[i].ToString);
End For;
Debug.Indent;
If (node.LeftNode <> Null) Then
Debug.WriteLine("Left branch");
print(node.LeftNode);
End If;
Debug.Unindent;
Debug.Indent;
If(node.RightNode <> Null) Then
Debug.WriteLine("Right branch");
print(node.RightNode);
End If;
Debug.Unindent;
End Sub print;
After executing the example the console window displays:
Number of trees in ensemble.
Information about tree branches.
The requirements and result of the Fore.NET example execution match with those in the Fore example.
Imports Prognoz.Platform.Interop.Stat;
…
Public Shared Sub Main(Params: StartParams);
Var
rf: SmRandomForest;
Y: Array[16] Of Integer;
X1,X2: Array[16] Of Double;
res, i: Integer;
Explanatories: ISlSeries;
Explan: ISlSerie;
Forest: IBinaryTreeForest;
TreeNode: IBinaryTreeNode;
Begin
rf := New SmRandomForest.Create();
// Set explained series
Y[00] := 0; Y[08] := 1;
Y[01] := 1; Y[09] := 0;
Y[02] := 0; Y[10] := 2;
Y[03] := 2; Y[11] := 2;
Y[04] := 1; Y[12] := 1;
Y[05] := 1; Y[13] := 2;
Y[06] := 2; Y[14] := 0;
Y[07] := 1; Y[15] := 2;
rf.Dependent := Y;
// Set explanatory series (integer)
X1[00] := 34.13; X1[08] := 29.27;
X1[01] := 21.52; X1[09] := 23.39;
X1[02] := 25.43; X1[10] := 28.28;
X1[03] := 43.42; X1[11] := 43.55;
X1[04] := 40.19; X1[12] := 44.80;
X1[05] := 24.97; X1[13] := 23.23;
X1[06] := 20.57; X1[14] := 37.14;
X1[07] := 30.81; X1[15] := 27.44;
Explanatories := rf.ExplanatoriesContinuous;
Explanatories.Clear();
Explan := Explanatories.Add();
Explan.Id := "Continuous_X1";
Explan.Name := "X1";
Explan.Value := X1;
X2[00] := 13; X2[08] := 91.27;
X2[01] := 1.5; X2[09] := 43.39;
X2[02] := 25; X2[10] := 68.28;
X2[03] := 4.42; X2[11] := 0.55;
X2[04] := 40.9; X2[12] := 2.80;
X2[05] := 45.97; X2[13] := 1.23;
X2[06] := 13.57; X2[14] := 37.14;
X2[07] := 0.81; X2[15] := 5.44;
Explan := Explanatories.Add();
Explan.Id := "Continuous_X2";
Explan.Name := "X2";
Explan.Value := X2;
// Forest size
rf.ForestSize := 5;
// Trees size
rf.TreeSizeSpecification.MaximumNumberOfLevels := 2;
rf.TreeSizeSpecification.MinimumNumberOfCases := 1;
// Perform calculation and display error messages
res:=rf.Execute();
If (res = 0) Then
Forest := rf.Forest;
System.Diagnostics.Debug.WriteLine("Number of trees in ensemble: "+Forest.Count.ToString());
For i := 0 To Forest.Count - 1 Do
TreeNode := Forest.Item[i];
System.Diagnostics.Debug.WriteLine("Tree "+(i+1).ToString());
System.Diagnostics.Debug.WriteLine(" Root node");
print(TreeNode);
End For;
Else
System.Diagnostics.Debug.WriteLine(rf.Errors);
End If;
End Sub;
…
Public Shared Sub print(node: IBinaryTreeNode);
Var
i: integer;
Categorical: Boolean = False;
Begin
System.Diagnostics.Debug.WriteLine(" Number of node in tree: " + node.NodeIndex.ToString());
If node.Parent <> Null Then
System.Diagnostics.Debug.WriteLine(" Root node: " + node.Parent.Name);
End If;
System.Diagnostics.Debug.WriteLine(" Number of observations in node: " + node.Total.ToString());
System.Diagnostics.Debug.WriteLine(" Name of classifying variable: " + node.Name);
System.Diagnostics.Debug.WriteLine(" Explanatory series number: " + node.ExplanatorieIndex.ToString());
System.Diagnostics.Debug.WriteLine(" Improvement coefficient: " + node.Improvement.ToString());
System.Diagnostics.Debug.Write(" Type of classifying variable: ");
Select Case node.PropertyType
Case
DecisionTreePropertyType.dtptCategorical: System.Diagnostics.Debug.WriteLine("categorical");
Categorical := True;
Case DecisionTreePropertyType.dtptNoProperty: System.Diagnostics.Debug.WriteLine("-");
Case DecisionTreePropertyType.dtptOrdered: System.Diagnostics.Debug.WriteLine("ordinal");
Case DecisionTreePropertyType.dtptValue: System.Diagnostics.Debug.WriteLine("quantitative");
End Select;
If Not Categorical Then
System.Diagnostics.Debug.WriteLine(" Checked value: " + node.Value.ToString());
End If;
For i := 0 To node.Categories.Length - 1 Do
System.Diagnostics.Debug.WriteLine(" Category: " + node.Categories.GetValue(i).ToString());
End For;
System.Diagnostics.Debug.Indent();
If (node.LeftNode <> Null) Then
System.Diagnostics.Debug.WriteLine("Left branch");
print(node.LeftNode);
End If;
System.Diagnostics.Debug.Unindent();
System.Diagnostics.Debug.Indent();
If (node.RightNode <> Null) Then
System.Diagnostics.Debug.WriteLine("Right branch");
print(node.RightNode);
End If;
System.Diagnostics.Debug.Unindent();
End Sub print;
See also: