ISmKmeansClusterAnalysis.Objects

Fore Syntax

Objects: ISlSeries;

Fore.NET Syntax

Objects: Prognoz.Platform.Interop.Stat.ISlSeries;

Description

The Objects property determines the list of considered objects.

Comments

Set of vectors (n): objects; vector length (m): characteristics.

Fore Example

Add a link to the Stat system assembly.

Sub UserProc;
Var
    KCA: SmKmeansClusterAnalysis;
    Obj: ISlSeries;
    Cls: IClustersType;
    x1: Array[2Of Double;
    masDouble: Array Of Double;
    masInteger: Array Of Integer;
    res, i, j: Integer;
    str: string;
Begin
    KCA := New SmKmeansClusterAnalysis.Create;
    // Set objects for consideration
    Obj := KCA.Objects;
    x1[0]:= 27; x1[1]:= 19;
    Obj.Add.Value := x1;
    x1[0]:= 11; x1[1]:= 46;
    Obj.Add.Value := x1;
    x1[0]:= 25; x1[1]:= 15;
    Obj.Add.Value := x1;
    x1[0]:= 36; x1[1]:= 27;
    Obj.Add.Value := x1;
    x1[0]:= 35; x1[1]:= 25;
    Obj.Add.Value := x1;
    x1[0]:= 10; x1[1]:= 43;
    Obj.Add.Value := x1;
    x1[0]:= 11; x1[1]:= 44;
    Obj.Add.Value := x1;
    x1[0]:= 36; x1[1]:= 24;
    Obj.Add.Value := x1;
    x1[0]:= 26; x1[1]:= 14;
    Obj.Add.Value := x1;
    x1[0]:= 26; x1[1]:= 14;
    Obj.Add.Value := x1;
    x1[0]:= 9; x1[1]:= 45;
    Obj.Add.Value := x1;
    x1[0]:= 33; x1[1]:= 23;
    Obj.Add.Value := x1;
    x1[0]:= 27; x1[1]:= 16;
    Obj.Add.Value := x1;
    x1[0]:= 10; x1[1]:= 47;
    Obj.Add.Value := x1;
    // Set the number of clusters
    KCA.ClusterCount := 3;
    // Set maximum number of iterations
    KCA.MaxIt := 100;
    // Set selection of initial centers for clusters
    KCA.InitCenters := ClusterCentersType.FirstObject;
    // Do not exclude repeated elements before clustering
    KCA.ExcludeRepeated := False;
    res := KCA.Execute;
    If res <> 0 Then
        Debug.WriteLine(KCA.Errors);
    Else
        Cls := KCA.Clusters;
        Debug.WriteLine("=== Cluster centers ===");
        For i := 0 To KCA.Clusters.Count-1 Do //by clusters
            Debug.WriteLine("  " + "Cluster #" + (i+1).ToString + " ");
            masDouble := Cls.Item(i).Center;
            str := "  " + "(" + masDouble[0].ToString;
            For j := 1 To masDouble.Length-1 Do //by element size
                str := str + ";" + masDouble[j].ToString;
            End For;
            str := str + ")";
            Debug.WriteLine(str);
        End For;
        Debug.WriteLine("=== List of objects by clusters ===");
        For i := 0 To KCA.ClusterCount - 1 Do //by clusters
            Debug.WriteLine("  " + "Cluster #" + (i+1).ToString + " ");
            masInteger := Cls.Item(i).ObjectsList;
            str := "  " + masInteger[0].ToString;
            For j := 1 To Cls.Item(i).Size - 1 Do //by all objects in cluster
                str := str + ",  " + masInteger[j].ToString;
            End For;
            Debug.WriteLine(str);
        End For;
        Debug.WriteLine("=== Distances from objects to cluster centers ===");
        Debug.WriteLine("Object - Distance");
        For i := 0 To KCA.Distances.Length-1 Do
            Debug.WriteLine("  " + i.ToString + " - " + KCA.Distances[i].ToString)
        End For;
    End If;
End Sub UserProc;

After executing the example the console window displays the following:

Fore.NET Example

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
    KCA: SmKmeansClusterAnalysis;
    Obj: ISlSeries;
    Cls: IClustersType;
    x1: Array[2Of Double;
    masDouble, masInteger, Distances: System.Array;
    res, i, j: Integer;
    str: string;
Begin
    KCA := New SmKmeansClusterAnalysis.Create();
    // Set objects for consideration
    Obj := KCA.Objects;
    x1[0]:= 27; x1[1]:= 19;
    Obj.Add().Value := x1;
    x1[0]:= 11; x1[1]:= 46;
    Obj.Add().Value := x1;
    x1[0]:= 25; x1[1]:= 15;
    Obj.Add().Value := x1;
    x1[0]:= 36; x1[1]:= 27;
    Obj.Add().Value := x1;
    x1[0]:= 35; x1[1]:= 25;
    Obj.Add().Value := x1;
    x1[0]:= 10; x1[1]:= 43;
    Obj.Add().Value := x1;
    x1[0]:= 11; x1[1]:= 44;
    Obj.Add().Value := x1;
    x1[0]:= 36; x1[1]:= 24;
    Obj.Add().Value := x1;
    x1[0]:= 26; x1[1]:= 14;
    Obj.Add().Value := x1;
    x1[0]:= 26; x1[1]:= 14;
    Obj.Add().Value := x1;
    x1[0]:= 9; x1[1]:= 45;
    Obj.Add().Value := x1;
    x1[0]:= 33; x1[1]:= 23;
    Obj.Add().Value := x1;
    x1[0]:= 27; x1[1]:= 16;
    Obj.Add().Value := x1;
    x1[0]:= 10; x1[1]:= 47;
    Obj.Add().Value := x1;
    // Set the number of clusters
    KCA.ClusterCount := 3;
    // Set maximum number of iterations
    KCA.MaxIt := 100;
    // Set selection of initial centers for clusters
    KCA.InitCenters := ClusterCentersType.cctFirstObject;
    // Do not exclude repeated elements before clustering
    KCA.ExcludeRepeated := False;
    res := KCA.Execute();
    If res <> 0 Then
        System.Diagnostics.Debug.WriteLine(KCA.Errors);
    Else
        Cls := KCA.Clusters;
        System.Diagnostics.Debug.WriteLine("=== Cluster centers ===");
        For i := 0 To KCA.Clusters.Count-1 Do //by clusters
            System.Diagnostics.Debug.WriteLine("  " + "Cluster #" + (i+1).ToString() + " ");
            masDouble := Cls.Item[i].Center;
            str := "  " + "(" + masDouble[0].ToString();
            For j := 1 To masDouble.Length-1 Do //by element size
                str := str + ";" + masDouble[j].ToString();
            End For;
            str := str + ")";
            System.Diagnostics.Debug.WriteLine(str);
        End For;
        System.Diagnostics.Debug.WriteLine("=== List of objects by clusters ===");
        For i := 0 To KCA.ClusterCount - 1 Do //by clusters
            System.Diagnostics.Debug.WriteLine("  " + "Cluster #" + (i+1).ToString() + " ");
            masInteger := Cls.Item[i].ObjectsList;
            str := "  " + masInteger[0].ToString();
            For j := 1 To Cls.Item[i].Size - 1 Do //by all objects in cluster
                str := str + ",  " + masInteger[j].ToString();
            End For;
            System.Diagnostics.Debug.WriteLine(str);
        End For;
        System.Diagnostics.Debug.WriteLine("=== Distances from objects to cluster centers ===");
        System.Diagnostics.Debug.WriteLine("Object - Distance");
        Distances := KCA.Distances;
        For i := 0 To KCA.Distances.Length-1 Do
            System.Diagnostics.Debug.WriteLine("  " + i.ToString() + " - " + Distances[i].ToString())
        End For;
    End If;
End Sub;

See also:

ISmKmeansClusterAnalysis