Count: Integer;
Свойство Count возвращает количество кластеров.
Для выполнения примера добавьте ссылку на системную сборку Stat.
Sub UserProc;
Var
hc: SmHierarchicalClusterAnalysis;
Obj: ISlSeries;
x1: Array Of Double;
Dist: ISlDistance;
res, i, j: Integer;
D: Double;
masDouble: Array Of Double;
Cls: IClustersType;
Cl: IClusterType;
Begin
hc := New SmHierarchicalClusterAnalysis.Create;
x1 := New Double[3];
//добавление признаков, в данном случае 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;
res := hc.Execute;
If res <> 0 Then
Debug.WriteLine(hc.Errors);
Else
Debug.WriteLine("=== Центры кластеров ===");
Cls := hc.Clusters;
For i := 0 To Cls.Count - 1 Do //по кластерам
Debug.Write("Кластер №" + i.ToString + " ");
Cl := Cls.Item(i);
masDouble := Cl.Center;
For j := 0 To masDouble.Length-1 Do //по всем признакам в кластере
d := masDouble[j];
Debug.Write(d.ToString + ", ");
End For;
Debug.WriteLine("");
End For;
End If;
End Sub UserProc;
После выполнения примера в окно консоли будут выведены центры кластеров:
Выполнение модуля начато
=== Центры кластеров ===
Кластер №0 1.5, 2, 1.5,
Кластер №1 4, 7.33333333333333, 4.33333333333333,
Выполнение модуля завершено
См. также: