ISlDistance.ComputeValues

Синтаксис Fore

ComputeValues: Boolean;

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

ComputeValues: boolean;

Описание

Свойство ComputeValues определяет, вычислять ли матрицу расстояний.

Комментарии

Допустимые значения:

Пример Fore

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

Sub UserProc;
Var
    hc: SmHierarchicalClusterAnalysis;
    Obj: ISlSeries;
    ClustCompOrd: IClustersCompositionOrderItem;
    x1: Array[3Of Double;
    Dist: ISlDistance;
    res, i, j: Integer;
    D: Double;
    masDouble, std: Array Of Double;
Begin
    hc := New SmHierarchicalClusterAnalysis.Create;
    //добавление признаков, в данном случае 5 объектов с 3мя признаками
    x1[0] := 1; x1[1] := 1; x1[2] := 1;
    Obj := hc.Objects;
    Obj.Add.Value := x1;
    x1[0] := 2; x1[1] := 3; x1[2] := 2;
    Obj.Add.Value := x1;
    x1[0] := 3; x1[1] := 6; x1[2] := 3;
    Obj.Add.Value := x1;
    x1[0] := 4; x1[1] := 8; x1[2] := 10;
    Obj.Add.Value := x1;
    x1[0] := 5; x1[1] := 8; x1[2] := 0;
    Obj.Add.Value := x1;
    //способ расчета расстояния между кластерами
    hc.ClusterLink := ClusterLinkType.Centroid;
    //число кластеров, на которое нужно разбить множество объектов
    hc.ClusterCount := 2;
    //параметры расчёта расстояний между объектами
    Dist := hc.Distance;
    //способ расчета расстояния между объектами
    Dist.Type := ObjectDistanceType.EuclideanSqr;
    //способ стандартизации признаков
    Dist.Standartization := StandartizationType.ScaleStd;
    std := New Double[hc.Objects.Count];
    For i := 0 To std.Length - 1 Do
        std[i] := 1 + i / 2;
    End For;
    //коэффициенты стандартизации
    Dist.StandartizationCoefficients := std;
    //вычисление матрицы расстояний
    hc.Distance.ComputeValues := True;
    //ориентация дендограммы
    hc.DendogramOrientation := DendogramOrientationType.East;
    res := hc.Execute;
    Debug.WriteLine(hc.Errors);
    Debug.WriteLine("== Объекты в порядке построения ==");
    masDouble := hc.Iord;
    For i := 0 To Obj.Count - 1 Do
        d := masDouble[i];
        Debug.WriteLine(i.ToString + " - " + d.ToString);
    End For;
    Debug.WriteLine("");
    Debug.WriteLine("=== Объединение в кластеры ===");
    For i := 0 To hc.ClustersCompositionOrder.Count - 1 Do
        ClustCompOrd := hc.ClustersCompositionOrder.Item(i);
        Debug.Write(i.ToString + ":" + ClustCompOrd.IndexUpperCluster.ToString + "+" + ClustCompOrd.IndexLowerCluster.ToString + ",");
        Debug.WriteLine(" d=" + ClustCompOrd.ClusterDistance.ToString);
    End For;
    Debug.WriteLine("");
    Debug.WriteLine("== Расстояния между кластерами в момент объединения ==");
    masDouble := hc.Dord;
    For i := 0 To Obj.Count - 1 Do
        d := masDouble[i];
        Debug.WriteLine(i.ToString + " - " + d.ToString);
    End For;
    Debug.WriteLine("");
    Debug.WriteLine("==Матрица расстояний ==");
    masDouble := Dist.Values;
    For i := 0 To Obj.Count - 1 Do
        Debug.WriteLine("Объект №" + i.ToString + " ");
        For j := 0 To Obj.Count - 1 Do
            d := masDouble[i, j];
            Debug.WriteLine(d.ToString + ", ");
        End For;
    End For;
End Sub UserProc;

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

В окно консоли выведены объекты в порядке построения, объединение в кластеры, расстояния между кластерами в момент объединения и матрица расстояний.

Пример Fore.NET

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

Imports Prognoz.Platform.Interop.Stat;

Public Shared Sub Main(Params: StartParams);
Var
    hc: SmHierarchicalClusterAnalysis;
    Obj: ISlSeries;
    ClustCompOrd: IClustersCompositionOrderItem;
    masDouble, std: Array;
    x1: Array[3Of Double;
    Dist: ISlDistance;
    res, i, j: Integer;
    d: Double;
    //str: string;
Begin
    hc := New SmHierarchicalClusterAnalysis.Create();
    //добавление признаков, в данном случае 5 объектов с 3мя признаками
    x1[0] := 1; x1[1] := 1; x1[2] := 1;
    Obj := hc.Objects;
    Obj.Add().Value := x1;
    x1[0] := 2; x1[1] := 3; x1[2] := 2;
    Obj.Add().Value := x1;
    x1[0] := 3; x1[1] := 6; x1[2] := 3;
    Obj.Add().Value := x1;
    x1[0] := 4; x1[1] := 8; x1[2] := 10;
    Obj.Add().Value := x1;
    x1[0] := 5; x1[1] := 8; x1[2] := 0;
    Obj.Add().Value := x1;
    //способ расчета расстояния между кластерами
    hc.ClusterLink := ClusterLinkType.cltCentroid;
    //число кластеров, на которое нужно разбить множество объектов
    hc.ClusterCount := 2;
    //параметры расчёта расстояний между объектами
    Dist := hc.Distance;
    //способ расчета расстояния между объектами
    Dist.Type := ObjectDistanceType.odEuclideanSqr;
    //способ стандартизации признаков
    Dist.Standartization := StandartizationType.stScaleStd;
    std := New Double[hc.Objects.Count];
    For i := 0 To std.Length - 1 Do
        std[i] := 1 + i / 2;
    End For;
    //коэффициенты стандартизации
    Dist.StandartizationCoefficients := std;
    //вычисление матрицы расстояний
    hc.Distance.ComputeValues := True;
    //ориентация дендограммы
    hc.DendogramOrientation := DendogramOrientationType.doEast;
    res := hc.Execute();
    System.Diagnostics.Debug.WriteLine(hc.Errors);
    System.Diagnostics.Debug.WriteLine("== Объекты в порядке построения ==");
    masDouble := hc.Iord;
    For i := 0 To Obj.Count - 1 Do
        d := masDouble[i] As double;
        System.Diagnostics.Debug.WriteLine(i.ToString() + " - " + d.ToString());
    End For;
    System.Diagnostics.Debug.WriteLine("");
    System.Diagnostics.Debug.WriteLine("=== Объединение в кластеры ===");
    For i := 0 To hc.ClustersCompositionOrder.Count - 1 Do
        ClustCompOrd := hc.ClustersCompositionOrder.Item[i];
        System.Diagnostics.Debug.Write(i.ToString() + ":" + ClustCompOrd.IndexUpperCluster.ToString() + "+" + ClustCompOrd.IndexLowerCluster.ToString() + ",");
        System.Diagnostics.Debug.WriteLine(" d=" + ClustCompOrd.ClusterDistance.ToString());
    End For;
    System.Diagnostics.Debug.WriteLine("");
    System.Diagnostics.Debug.WriteLine("== Расстояния между кластерами в момент объединения ==");
    masDouble := hc.Dord;
    For i := 0 To Obj.Count - 1 Do
        d := masDouble[i] As double;
        System.Diagnostics.Debug.WriteLine(i.ToString() + " - " + d.ToString());
    End For;
    System.Diagnostics.Debug.WriteLine("");
    System.Diagnostics.Debug.WriteLine("==Матрица расстояний ==");
    masDouble := Dist.Values;
    For i := 0 To Obj.Count - 1 Do
        System.Diagnostics.Debug.WriteLine("Объект №" + i.ToString() + " ");
        For j := 0 To Obj.Count - 1 Do
            d := masDouble[i, j] As double;
            System.Diagnostics.Debug.WriteLine(d.ToString() + ", ");
        End For;
    End For;
End Sub;

См. также:

ISlDistance