ISmDiscriminantAnalysis.ClassCount

Синтаксис

ClassCount: Integer;

ClassCount: integer;

Описание

Свойство ClassCount возвращает количество классов, полученных в результате расчёта.

Комментарии

Итоговую классификацию объектов возвращает свойство IDataMining.FilledDependent.

Пример

Для выполнения примера добавьте ссылки на системные сборки: MathFin, Stat.

// Основная процедура
Sub UserDiscrAn;
Var
    DA: SmDiscriminantAnalysis;
    y: Array[60Of Integer;
    x1, x2, x3, x4, x5, x6, x7, x8: Array[60Of Double;
    Ex: ISlSeries;
    res, i, j: Integer;
    indx0: Double;
    resM: Array Of Integer;
    str: String;
Begin
    DA := New SmDiscriminantAnalysis.Create;
    // Исходные данные: шестьдесят объектов с восьмью признаками
    For i := 0 To 59 Do
        x1[i] := Math.RandBetween(95104);
        x2[i] := Math.RandBetween(95104);
        x3[i] := Math.RandBetween(95104);
        x4[i] := Math.RandBetween(95104);
        x5[i] := Math.RandBetween(95104);
        x6[i] := Math.RandBetween(95104);
        x7[i] := Math.RandBetween(95104);
        x8[i] := Math.RandBetween(95104);
    End For;
    // Значения объясняемого ряда
    For i := 0 To 39 Do
        y[i] := Math.RandBetweenI(15);
    End For;
    For i := 40 To 59 Do
        y[i] := -1;
    End For;
    // Задаем объясняемую переменную
    DA.Explained := y;
    // Задаем объясняющие переменные
    Ex := DA.Explanatories;
    Ex.Add.Value := x1; Ex.Add.Value := x5;
    Ex.Add.Value := x2; Ex.Add.Value := x6;
    Ex.Add.Value := x3; Ex.Add.Value := x7;
    Ex.Add.Value := x4; Ex.Add.Value := x8;
    // Выполняем расчёт и выводим результаты
    If DA.Execute = 0 Then
        Debug.WriteLine(" == Сводные результаты классификации == ");
        res := DA.ClassCount;
        Debug.WriteLine("Количество классов: " + res.ToString);
        resM := DA.ClassificationSummary;
        For i := 0 To res - 1 Do
            For j := 0 To res - 1 Do
                str := str + " " + (resM[i, j] As Integer).ToString;
            End For;
            str := str + " | " + (resM[i, res] As Integer).ToString;
            Debug.WriteLine(str);
            str := "";
        End For;
        str := "- - - - - - - - ";
        Debug.WriteLine(str);
        str := "";
        For j := 0 To DA.ClassCount - 1 Do
                str := str + " " + (resM[res, j] As Integer).ToString;
            End For;
        str := str + " | " + (resM[res, res] As Integer).ToString;
        Debug.WriteLine(str);

        str := "===========================" + #13 + #10;
        Debug.WriteLine(str + " == Общее среднее == ");
        Print(DA.TotalAverage, DA.TotalAverage.Rank);
        Debug.WriteLine(" == Внутригрупповое среднее == ");
        Print(DA.WithinAverage, DA.WithinAverage.Rank);
        Debug.WriteLine(str + " == Общее стандартное отклонение == ");
        Print(DA.TotalStdDev, DA.TotalStdDev.Rank);
        Debug.WriteLine(" == Внутригрупповое стандартное отклонение == ");
        Print(DA.WithinStdDev, DA.WithinStdDev.Rank);
        Debug.WriteLine(str + " == Общая корреляция == ");
        Print(DA.TotalCorrelation, DA.TotalCorrelation.Rank);
        Debug.WriteLine(" == Внутригрупповая корреляция == ");
        Print(DA.WithinCorrelation, DA.WithinCorrelation.Rank);
        Debug.WriteLine(" == Усреднённая внутригрупповая корреляция == ");
        Print(DA.PooledWithinCorrelation, DA.PooledWithinCorrelation.Rank);
        Debug.WriteLine(str + " == Общая ковариация == ");
        Print(DA.TotalCovariance, DA.TotalCovariance.Rank);
        Debug.WriteLine(" == Внутригрупповая ковариация == ");
        Print(DA.WithinCovariance, DA.WithinCovariance.Rank);
        Debug.WriteLine(" == Усреднённая внутригрупповая ковариация == ");
        Print(DA.PooledWithinCovariance, DA.PooledWithinCovariance.Rank);
        Debug.WriteLine(str + " == Коэффициенты канонических дискриминантных функций == ");
        Debug.WriteLine("    = стандартизованные = ");
        Print(DA.StdDiscriminantFuncs, DA.StdDiscriminantFuncs.Rank);
        Debug.WriteLine("    = нестандартизованные = ");
        Print(DA.NonStdDiscriminantFuncs, DA.NonStdDiscriminantFuncs.Rank);
        Debug.WriteLine(str + " == Статистика Уилкса == ");
        Print(DA.WilkesStatistics, DA.WilkesStatistics.Rank);
        Debug.WriteLine(str + " == Функции Фишера == ");
        Print(DA.FishersFuncs, DA.FishersFuncs.Rank);
        Debug.WriteLine(str + " == Структурная матрица == ");
        Print(DA.StructuralMatrix, DA.StructuralMatrix.Rank);
        Debug.WriteLine(str + " == Собственные значения == ");
        Print(DA.EigenValues, DA.EigenValues.Rank);
        Debug.WriteLine(str + " == Классификация переменных == ");
        For i := 0 To DA.FinallyExplained.Length - 1 Do
            indx0 := DA.FinallyExplained[i];
            Debug.WriteLine(i.ToString + ".  " + indx0.ToString);
        End For;
    End If;
End Sub UserDiscrAn;
// Процедура вывода данных
Sub Print(a: Array Of Double; d2: integer);
Var
    ci: ICultureInfo;
    i, j: integer;
    s: string;
Begin
    ci := CultureInfo.Current;
    If d2 = 2 Then
        For i := 0 To a.GetUpperBound(2Do
            s := "";
            For j := 0 To a.GetUpperBound(1Do
                If Double.IsNan(a[j, i]) Then
                    s := s + " " + " - ";
                Else
                    s := s + " " + ci.FormatDoublePrec(a[j, i], 2);
                End If;
            End For;
            Debug.WriteLine(s);
        End For;
    Else
        For i := 0 To a.GetUpperBound(1Do
            If Double.IsNan(a[i]) Then
                s := s + " " + " - ";
            Else
                s := s + " " + ci.FormatDoublePrec(a[i], 2);
            End If;
        End For;
        Debug.WriteLine(s);
    End If;
End Sub Print;

// Основная процедура
Public Shared Sub UserDiscrAn();
Var
    DA: SmDiscriminantAnalysis;
    y: Array[60Of Integer;
    x1, x2, x3, x4, x5, x6, x7, x8: Array[60Of Double;
    Ex: ISlSeries;
    res, i, j: Integer;
    indx0: integer;
    resM: System.Array;
    str: String;
    m: Prognoz.Platform.Interop.MathFin.MathClass;
Begin
    DA := New SmDiscriminantAnalysis.Create();
    m := New Prognoz.Platform.Interop.MathFin.MathClass.Create();
    // Исходные данные: шестьдесят объектов с восьмью признаками
    For i := 0 To 59 Do
        x1[i] := m.RandBetween(95104);
        x2[i] := m.RandBetween(95104);
        x3[i] := m.RandBetween(95104);
        x4[i] := m.RandBetween(95104);
        x5[i] := m.RandBetween(95104);
        x6[i] := m.RandBetween(95104);
        x7[i] := m.RandBetween(95104);
        x8[i] := m.RandBetween(95104);
    End For;
    // Значения объясняемого ряда
    For i := 0 To 39 Do
        y[i] := m.RandBetweenI(15);
    End For;
    For i := 40 To 59 Do
        y[i] := -1;
    End For;
    // Задаем объясняемую переменную
    DA.Explained := y;
    // Задаем объясняющие переменные
    Ex := DA.Explanatories;
    Ex.Add().Value := x1; Ex.Add().Value := x5;
    Ex.Add().Value := x2; Ex.Add().Value := x6;
    Ex.Add().Value := x3; Ex.Add().Value := x7;
    Ex.Add().Value := x4; Ex.Add().Value := x8;
    // Выполняем расчёт и выводим результаты
    If DA.Execute() = 0 Then
        res := DA.ClassCount;
        System.Diagnostics.Debug.WriteLine("Количество классов: " + res.ToString());
        resM := DA.ClassificationSummary;
        For i := 0 To res - 1 Do
            For j := 0 To res - 1 Do
                str := str + " " + (m.Int(resM[i, j] As integer)).ToString();
            End For;
            str := str + " | " + (m.Int(resM[i, res] As integer)).ToString();
            System.Diagnostics.Debug.WriteLine(str);
            str := "";
        End For;
        str := "- - - - - - - - ";
        System.Diagnostics.Debug.WriteLine(str);
        str := "";
        For j := 0 To res - 1 Do
                str := str + " " + (m.Int(resM[res, j] As integer)).ToString();
            End For;
        str := str + " | " + (m.Int(resM[res, res] As integer)).ToString();

        System.Diagnostics.Debug.WriteLine(str);
        str := "==========================="; System.Diagnostics.Debug.WriteLine(str);
        System.Diagnostics.Debug.WriteLine(" == Общее среднее == ");
        Print(DA.TotalAverage, DA.TotalAverage.Rank);
        System.Diagnostics.Debug.WriteLine(" == Внутригрупповое среднее == ");
        Print(DA.WithinAverage, DA.WithinAverage.Rank);
        System.Diagnostics.Debug.WriteLine(str);
        System.Diagnostics.Debug.WriteLine(" == Общее стандартное отклонение == ");
        Print(DA.TotalStdDev, DA.TotalStdDev.Rank);
        System.Diagnostics.Debug.WriteLine(" == Внутригрупповое стандартное отклонение == ");
        Print(DA.WithinStdDev, DA.WithinStdDev.Rank);
        System.Diagnostics.Debug.WriteLine(str);
        System.Diagnostics.Debug.WriteLine(" == Общая корреляция == ");
        Print(DA.TotalCorrelation, DA.TotalCorrelation.Rank);
        System.Diagnostics.Debug.WriteLine(" == Внутригрупповая корреляция == ");
        Print(DA.WithinCorrelation, DA.WithinCorrelation.Rank);
        System.Diagnostics.Debug.WriteLine(" == Усреднённая внутригрупповая корреляция == ");
        Print(DA.PooledWithinCorrelation, DA.PooledWithinCorrelation.Rank);
        System.Diagnostics.Debug.WriteLine(str + " == Общая ковариация == ");
        Print(DA.TotalCovariance, DA.TotalCovariance.Rank);
        System.Diagnostics.Debug.WriteLine(" == Внутригрупповая ковариация == ");
        Print(DA.WithinCovariance, DA.WithinCovariance.Rank);
        System.Diagnostics.Debug.WriteLine(" == Усреднённая внутригрупповая ковариация == ");
        Print(DA.PooledWithinCovariance, DA.PooledWithinCovariance.Rank);
        System.Diagnostics.Debug.WriteLine(str);
        System.Diagnostics.Debug.WriteLine(" == Коэффициенты канонических дискриминантных функций == ");
        System.Diagnostics.Debug.WriteLine("    = стандартизованные = ");
        Print(DA.StdDiscriminantFuncs, DA.StdDiscriminantFuncs.Rank);
        System.Diagnostics.Debug.WriteLine("    = нестандартизованные = ");
        Print(DA.NonStdDiscriminantFuncs, DA.NonStdDiscriminantFuncs.Rank);
        System.Diagnostics.Debug.WriteLine(str);
        System.Diagnostics.Debug.WriteLine(" == Статистика Уилкса == ");
        Print(DA.WilkesStatistics, DA.WilkesStatistics.Rank);
        System.Diagnostics.Debug.WriteLine(str);
        System.Diagnostics.Debug.WriteLine(" == Функции Фишера == ");
        Print(DA.FishersFuncs, DA.FishersFuncs.Rank);
        System.Diagnostics.Debug.WriteLine(str);
        System.Diagnostics.Debug.WriteLine(" == Структурная матрица == ");
        Print(DA.StructuralMatrix, DA.StructuralMatrix.Rank);
        System.Diagnostics.Debug.WriteLine(str);
        System.Diagnostics.Debug.WriteLine(" == Собственные значения == ");
        Print(DA.EigenValues, DA.EigenValues.Rank);
        System.Diagnostics.Debug.WriteLine(str);
        System.Diagnostics.Debug.WriteLine(" == Классификация переменных == ");
        resM := DA.FinallyExplained;
        For i := 0 To resM.Length - 1 Do
            indx0 := resM[i] As integer;
            System.Diagnostics.Debug.WriteLine(i.ToString() + ".  " + indx0.ToString());
        End For;
    End If;
End Sub UserDiscrAn;

// Процедура вывода данных
Public Shared Sub Print(a: System.Array; d2: integer);
Var
    cc: CultureInfoClassClass;
    ci: iCultureInfo;
    i, j: integer;
    s: string;
Begin
    cc := New CultureInfoClassClass.Create();
    ci := cc.Current;
    If d2 = 2 Then
        For i := 0 To a.GetUpperBound(1Do
            s := "";
            For j := 0 To a.GetUpperBound(0Do
                If Double.IsNan(a[j, i] As double) Then
                    s := s + " " + " - ";
                Else
                    s := s + " " + ci.FormatDoublePrec(a[j, i] As double, 2);
                End If;
            End For;
            System.Diagnostics.Debug.WriteLine(s);
        End For;
    Else
        For i := 0 To a.GetUpperBound(0Do
            If Double.IsNan(a[i] As double) Then
                s := s + " " + " - ";
            Else
                s := s + " " + ci.FormatDoublePrec(a[i] As double, 2);
            End If;
        End For;
        System.Diagnostics.Debug.WriteLine(s);
    End If;
End Sub Print;

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

См. также:

ISmDiscriminantAnalysis