IBinaryTreeNode.Value

Синтаксис Fore

Value: Double;

Синтаксис Fore.NET

Value: double;

Описание

Свойство Value возвращает проверяемое значение.

Комментарии

Для получения номера объясняющего ряда, по которому происходит разбиение вершины, используйте свойство IBinaryTreeNode.ExplanatorieIndex.

Если критерий категориальный, то Value возвращает пустое значение.

Пример Fore

Добавьте ссылку на системную сборку Stat.

Sub UserProc;
Var
    rf: SmRandomForest;
    Y: Array[16Of Integer;
    X1,X2: Array[16Of Double;
    res, i: Integer;
    Explanatories: ISlSeries;
    Explan: ISlSerie;
    Forest: IBinaryTreeForest;
    TreeNode: IBinaryTreeNode;
Begin
    rf := New SmRandomForest.Create;
    // Задаем объясняемый ряд
    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;
    // Задаем объясняющие ряды (целочисленные)
    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;
    // Размер леса
    rf.ForestSize := 5;
    // Размер деревьев
    rf.TreeSizeSpecification.MaximumNumberOfLevels := 2;
    rf.TreeSizeSpecification.MinimumNumberOfCases := 1;
    // Производим расчет и выводим сообщения об ошибках
    res:=rf.Execute;
    If (res = 0Then
        Forest := rf.Forest;
        Debug.WriteLine("Число деревьев в ансамбле: "+Forest.Count.ToString);
        For i := 0 To Forest.Count - 1 Do
            TreeNode := Forest.Item(i);
            Debug.WriteLine("Дерево "+(i+1).ToString);
            Debug.WriteLine(" Корневая вершина");
            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("  Номер вершины в дереве: " + node.NodeIndex.ToString);
    If node.Parent <> Null Then
        Debug.WriteLine("  Корневая вершина: " + node.Parent.Name);
    End If;
    Debug.WriteLine("  Количество наблюдений в вершине: " + node.Total.ToString);
    Debug.WriteLine("  Наименование классифицирующей переменной: " + node.Name);
    Debug.WriteLine("  Номер объясняющего ряда: " + node.ExplanatorieIndex.ToString);
    Debug.WriteLine("  Коэффициент улучшения: " + node.Improvement.ToString);
    Debug.Write("  Тип классифицирующей переменной: ");
    Select Case node.PropertyType
        Case
            DecisionTreePropertyType.Categorical: Debug.WriteLine("категориальная");
            Categorical := True;
        Case DecisionTreePropertyType.NoProperty: Debug.WriteLine("-");
        Case DecisionTreePropertyType.Ordered: Debug.WriteLine("порядковая");
        Case DecisionTreePropertyType.Value: Debug.WriteLine("количественная");
    End Select;
    If Not Categorical Then
        Debug.WriteLine("  Проверяемое значение: " + node.Value.ToString);
    End If;
        For i := 0 To node.Categories.Length - 1 Do
        Debug.WriteLine("  Категория: " + node.Categories[i].ToString);
    End For;
    Debug.Indent;
    If (node.LeftNode <> NullThen
        Debug.WriteLine("Левая ветка");
        print(node.LeftNode);
    End If;
    Debug.Unindent;
    Debug.Indent;
    If(node.RightNode <> NullThen
        Debug.WriteLine("Правая ветка");
        print(node.RightNode);
    End If;
    Debug.Unindent;
End Sub print;

В результате выполнения примера в окно консоли будут выведены:

Пример Fore.NET

Необходимые требования и результат выполнения примера Fore.NET совпадают с примером Fore.

Imports Prognoz.Platform.Interop.Stat;

Public Shared Sub Main(Params: StartParams);
Var
    rf: SmRandomForest;
    Y: Array[16Of Integer;
    X1,X2: Array[16Of Double;
    res, i: Integer;
    Explanatories: ISlSeries;
    Explan: ISlSerie;   
    Forest: IBinaryTreeForest;
    TreeNode: IBinaryTreeNode;
Begin
    rf := New SmRandomForest.Create();
    // Задаем объясняемый ряд
    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;
    // Задаем объясняющие ряды (целочисленные)
    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;
    // Размер леса
    rf.ForestSize := 5;
    // Размер деревьев
    rf.TreeSizeSpecification.MaximumNumberOfLevels := 2;
    rf.TreeSizeSpecification.MinimumNumberOfCases := 1;
    // Производим расчет и выводим сообщения об ошибках
    res:=rf.Execute();
    If (res = 0Then
        Forest := rf.Forest;
        System.Diagnostics.Debug.WriteLine("Число деревьев в ансамбле: "+Forest.Count.ToString());
        For i := 0 To Forest.Count - 1 Do
            TreeNode := Forest.Item[i];
            System.Diagnostics.Debug.WriteLine("Дерево "+(i+1).ToString());
            System.Diagnostics.Debug.WriteLine(" Корневая вершина");
            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("  Номер вершины в дереве: " + node.NodeIndex.ToString());

    If node.Parent <>  Null Then
        System.Diagnostics.Debug.WriteLine("  Корневая вершина: " + node.Parent.Name);
    End If;
    System.Diagnostics.Debug.WriteLine("  Количество наблюдений в вершине: " + node.Total.ToString());
    System.Diagnostics.Debug.WriteLine("  Наименование классифицирующей переменной: " + node.Name);
    System.Diagnostics.Debug.WriteLine("  Номер объясняющего ряда: " + node.ExplanatorieIndex.ToString());
    System.Diagnostics.Debug.WriteLine("  Коэффициент улучшения: " + node.Improvement.ToString());
    System.Diagnostics.Debug.Write("  Тип классифицирующей переменной: ");
    Select Case node.PropertyType
        Case
            DecisionTreePropertyType.dtptCategorical: System.Diagnostics.Debug.WriteLine("категориальная");
            Categorical := True;
        Case DecisionTreePropertyType.dtptNoProperty: System.Diagnostics.Debug.WriteLine("-");
        Case DecisionTreePropertyType.dtptOrdered: System.Diagnostics.Debug.WriteLine("порядковая");
        Case DecisionTreePropertyType.dtptValue: System.Diagnostics.Debug.WriteLine("количественная");
    End Select;
    If Not Categorical Then
        System.Diagnostics.Debug.WriteLine("  Проверяемое значение: " + node.Value.ToString());
    End If;
        For i := 0 To node.Categories.Length - 1 Do
        System.Diagnostics.Debug.WriteLine("  Категория: " + node.Categories.GetValue(i).ToString());
    End For;
    System.Diagnostics.Debug.Indent();
    If (node.LeftNode <> NullThen
        System.Diagnostics.Debug.WriteLine("Левая ветка");
        print(node.LeftNode);
    End If;
    System.Diagnostics.Debug.Unindent();
    System.Diagnostics.Debug.Indent();
    If (node.RightNode <> NullThen
        System.Diagnostics.Debug.WriteLine("Правая ветка");
        print(node.RightNode);
    End If;
    System.Diagnostics.Debug.Unindent();
End Sub print;

См. также:

IBinaryTreeNode