ISmLogisticRegression.Probabilities

Синтаксис Fore

Probabilities: Array;

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

Probabilities: System.Array;

Описание

Свойство Probabilities возвращает ряд вероятностей прогноза логистической регрессии.

Комментарии

Для определения порогового значения вероятности для классификации используйте свойство ISmLogisticRegression.Threshold.

Пример Fore

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

Sub UserLogisticR;
Var
    Binary: SmLogisticRegression;
    e, s: Array[62] Of Double;
    Coef: IModelCoefficients;
    stat: ISummaryStatistics;
    i, res: Integer;
    ROCcurve: IROCcurve;
    FilledDependent, ar, Probabilities, ProbFitted: Array Of Double;
    OneMinusSpecificity, Sensitivity, CutOffPoints: Array Of Double;
Begin
    // Задаем данные для анализа
    // Значения, соответствующие социальному статусу
    s[0] := Double.Nan; s[11] := 0; s[22] := 0; s[33] := Double.Nan; s[44] := 1; s[55] := Double.Nan;
    s[1] := 1; s[12] := 1; s[23] := 1; s[34] := 0; s[45] := 1; s[56] := 1;
    s[2] := Double.Nan; s[13] := 1; s[24] := 0; s[35] := 0; s[46] := 1; s[57] := 1;
    s[3] := 0; s[14] := 0; s[25] := 0; s[36] := 1; s[47] := 0; s[58] := 1;
    s[4] := 0; s[15] := 0; s[26] := 0; s[37] := 0; s[48] := 1; s[59] := 1;
    s[5] := 1; s[16] := 0; s[27] := 0; s[38] := 0; s[49] := 0; s[60] := 0;
    s[6] := 0; s[17] := 0; s[28] := 0; s[39] := 0; s[50] := 0; s[61] := 0;
    s[7] := 1; s[18] := Double.Nan; s[29] := Double.Nan; s[40] := 0; s[51] := Double.Nan;
    s[8] := 1; s[19] := 0; s[30] := 0; s[41] := 0; s[52] := 0;
    s[9] := 1; s[20] := 1; s[31] := 0; s[42] := Double.Nan; s[53] := 0;
    s[10] := 1; s[21] := 0; s[32] := 0; s[43] := 1; s[54] := 0;
    // Значения, соответствующие возрастной группе
    e[0] := 1; e[11] := 0; e[22] := 1; e[33] := 2; e[44] := 2; e[55] := 2;
    e[1] := 1; e[12] := 1; e[23] := 2; e[34] := 1; e[45] := 0; e[56] := 0;
    e[2] := 1; e[13] := 1; e[24] := 1; e[35] := 3; e[46] := 1; e[57] := 1;
    e[3] := 0; e[14] := 1; e[25] := 0; e[36] := 1; e[47] := 1; e[58] := 0;
    e[4] := 0; e[15] := 2; e[26] := 1; e[37] := 1; e[48] := 1; e[59] := 0;
    e[5] := 1; e[16] := 1; e[27] := 0; e[38] := 2; e[49] := 0; e[60] := 2;
    e[6] := 2; e[17] := 0; e[28] := 1; e[39] := 3; e[50] := 1; e[61] := 2;
    e[7] := 0; e[18] := 1; e[29] := 3; e[40] := 1; e[51] := 0;
    e[8] := 3; e[19] := 3; e[30] := 1; e[41] := 0; e[52] := 0;
    e[9] := 1; e[20] := 4; e[31] := 1; e[42] := 4; e[53] := 2;
    e[10] := 2; e[21] := 0; e[32] := 2; e[43] := 1; e[54] := 0;
    // Создаем метод
    binary := New SmLogisticRegression.Create;
    // Задаем объясняемый ряд
    binary.Dependent.Value := s;
    // Задаем признак для классификации
    binary.Explanatories.Add.Value := e;
    // Задаем точность решения
    binary.Tolerance := 0.005;
    // Задаем максимальное число итераций
    binary.MaxIteration := 10000;
    // Задаем параметры ROC-кривой
    ROCcurve := binary.ROCcurve;
    ROCcurve.ConfidenceLevel := 0.85;
    // Выполняем расчёт и выводим результаты расчёта
    res := binary.Execute;
    If res <> 0 Then
        Debug.WriteLine(binary.Errors);
    Else
        Debug.WriteLine("Количество итераций, потребовавшихся для решения: ");
        Debug.Indent;
        Debug.WriteLine(binary.NumOfIter);
        Debug.Unindent;
        Debug.WriteLine("До заполнения; после заполнения");
        Debug.Indent;
        FilledDependent := binary.FilledDependent.Value;
        For i := 0 To s.Length - 1 Do
            If s[i] = 0 Then
                Debug.Write("Single ");
            Elseif s[i] = 1 Then
                Debug.Write("Married ");
            Else
                Debug.Write(" - ");
            End If;
            If FilledDependent[i] = 0 Then
                Debug.WriteLine("Single");
            Else
                Debug.WriteLine("Married");
            End If;
        End For;
        Debug.Unindent;
        Debug.WriteLine("Оцененные значения коэффициентов:");
        Debug.Indent;
        Coef := binary.ModelCoefficients;
        ar := Coef.Coefficients.Estimate;
        For i := 0 To ar.Length - 1 Do
            Debug.WriteLine(ar[i]);
        End For;
        Debug.Unindent;
        Debug.WriteLine("Среднее логарифма функции правдоподобия: ");
        Debug.Indent;
        Stat := binary.SummaryStatistics;
        Debug.WriteLine(Stat.AvgLogL);
        Debug.Unindent;
        Debug.WriteLine("Ряд вероятностей");
        Debug.Indent;
        Probabilities := binary.Probabilities;
        For i := 0 To Probabilities.Length - 1 Do
            Debug.WriteLine((i + 1).ToString + ". " + Probabilities[i].ToString);
        End For;
        Debug.Unindent;
        Debug.WriteLine("Ряд вероятностей для обучающих объектов");
        Debug.Indent;
        ProbFitted := binary.ProbFitted;
        For i := 0 To ProbFitted.Length - 1 Do
            Debug.WriteLine((i + 1).ToString + ". " + ProbFitted[i].ToString);
        End For;
        Debug.Unindent;
        // Выводим данные ROC-кривой
        Debug.WriteLine("Данные ROC-кривой:");
        Debug.Indent;
        Debug.WriteLine("Специфичность:");
        Debug.Indent;
        OneMinusSpecificity := ROCcurve.OneMinusSpecificity;
        For i := 0 To OneMinusSpecificity.Length - 1 Do
            Debug.WriteLine(OneMinusSpecificity[i]);
        End For;
        Debug.Unindent;
        Debug.WriteLine("Чувствительность:");
        Debug.Indent;
        Sensitivity := ROCcurve.Sensitivity;
        For i := 0 To Sensitivity.Length - 1 Do
            Debug.WriteLine(Sensitivity[i]);
        End For;
        Debug.Unindent;
        Debug.WriteLine("Площадь под кривой: " + ROCcurve.Area.ToString);
        Debug.WriteLine("Стандартная ошибка: " + ROCcurve.StdError.ToString);
        Debug.WriteLine("Асимптотический доверительный интервал:");
        Debug.Indent;
        Debug.WriteLine("Нижняя граница: " + ROCcurve.ConfidenceIntervalLower.ToString);
        Debug.WriteLine("Верхняя граница: " + ROCcurve.ConfidenceIntervalUpper.ToString);
        Debug.Unindent;
        Debug.WriteLine("Порог отсечения:");
        Debug.Indent;
        CutOffPoints := ROCcurve.CutOffPoints;
        For i := 0 To CutOffPoints.Length - 1 Do
            Debug.WriteLine(CutOffPoints[i]);
        End For;
        Debug.Unindent;
        Debug.Unindent;
    End If;
End Sub UserLogisticR;

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

Пример Fore.NET

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

Imports Prognoz.Platform.Interop.Stat;

Public Shared Sub Main(Params: StartParams);
Var
    Binary: SmLogisticRegression;
    e, s: Array[62] Of Double;
    Coef: IModelCoefficients;
    stat: ISummaryStatistics;
    i, res: Integer;
    ROCcurve: IROCcurve;
    FilledDependent, ar, Probabilities, ProbFitted: System.Array;
    OneMinusSpecificity, Sensitivity, CutOffPoints: System.Array;
Begin
    // Задаем данные для анализа
    // Значения, соответствующие социальному статусу
    s[0] := Double.Nan; s[11] := 0; s[22] := 0; s[33] := Double.Nan; s[44] := 1; s[55] := Double.Nan;
    s[1] := 1; s[12] := 1; s[23] := 1; s[34] := 0; s[45] := 1; s[56] := 1;
    s[2] := Double.Nan; s[13] := 1; s[24] := 0; s[35] := 0; s[46] := 1; s[57] := 1;
    s[3] := 0; s[14] := 0; s[25] := 0; s[36] := 1; s[47] := 0; s[58] := 1;
    s[4] := 0; s[15] := 0; s[26] := 0; s[37] := 0; s[48] := 1; s[59] := 1;
    s[5] := 1; s[16] := 0; s[27] := 0; s[38] := 0; s[49] := 0; s[60] := 0;
    s[6] := 0; s[17] := 0; s[28] := 0; s[39] := 0; s[50] := 0; s[61] := 0;
    s[7] := 1; s[18] := Double.Nan; s[29] := Double.Nan; s[40] := 0; s[51] := Double.Nan;
    s[8] := 1; s[19] := 0; s[30] := 0; s[41] := 0; s[52] := 0;
    s[9] := 1; s[20] := 1; s[31] := 0; s[42] := Double.Nan; s[53] := 0;
    s[10] := 1; s[21] := 0; s[32] := 0; s[43] := 1; s[54] := 0;
    // Значения, соответствующие возрастной группе
    e[0] := 1; e[11] := 0; e[22] := 1; e[33] := 2; e[44] := 2; e[55] := 2;
    e[1] := 1; e[12] := 1; e[23] := 2; e[34] := 1; e[45] := 0; e[56] := 0;
    e[2] := 1; e[13] := 1; e[24] := 1; e[35] := 3; e[46] := 1; e[57] := 1;
    e[3] := 0; e[14] := 1; e[25] := 0; e[36] := 1; e[47] := 1; e[58] := 0;
    e[4] := 0; e[15] := 2; e[26] := 1; e[37] := 1; e[48] := 1; e[59] := 0;
    e[5] := 1; e[16] := 1; e[27] := 0; e[38] := 2; e[49] := 0; e[60] := 2;
    e[6] := 2; e[17] := 0; e[28] := 1; e[39] := 3; e[50] := 1; e[61] := 2;
    e[7] := 0; e[18] := 1; e[29] := 3; e[40] := 1; e[51] := 0;
    e[8] := 3; e[19] := 3; e[30] := 1; e[41] := 0; e[52] := 0;
    e[9] := 1; e[20] := 4; e[31] := 1; e[42] := 4; e[53] := 2;
    e[10] := 2; e[21] := 0; e[32] := 2; e[43] := 1; e[54] := 0;
    // Создаем метод
    binary := New SmLogisticRegression.Create();
    // Задаем объясняемый ряд
    binary.Dependent.Value := s;
    // Задаем признак для классификации
    binary.Explanatories.Add().Value := e;
    // Задаем точность решения
    binary.Tolerance := 0.005;
    // Задаем максимальное число итераций
    binary.MaxIteration := 10000;
    // Задаем параметры ROC-кривой
    ROCcurve := binary.ROCcurve;
    ROCcurve.ConfidenceLevel := 0.85;
    // Выполняем расчёт и выводим результаты расчёта
    res := binary.Execute();
    If res <> 0 Then
        System.Diagnostics.Debug.WriteLine(binary.Errors);
    Else
        System.Diagnostics.Debug.WriteLine("Количество итераций, потребовавшихся для решения: ");
        System.Diagnostics.Debug.Indent();
        System.Diagnostics.Debug.WriteLine(binary.NumOfIter);
        System.Diagnostics.Debug.Unindent();
        System.Diagnostics.Debug.WriteLine("До заполнения; после заполнения");
        System.Diagnostics.Debug.Indent();
        FilledDependent := binary.FilledDependent.Value;
        For i := 0 To s.Length - 1 Do
            If s[i] = 0 Then
                System.Diagnostics.Debug.Write("Single ");
            Elseif s[i] = 1 Then
                System.Diagnostics.Debug.Write("Married ");
            Else
                System.Diagnostics.Debug.Write(" - ");
            End If;
            If FilledDependent[i] As double = 0 Then
                System.Diagnostics.Debug.WriteLine("Single");
            Else
                System.Diagnostics.Debug.WriteLine("Married");
            End If;
        End For;
        System.Diagnostics.Debug.Unindent();
        System.Diagnostics.Debug.WriteLine("Оцененные значения коэффициентов:");
        System.Diagnostics.Debug.Indent();
        Coef := binary.ModelCoefficients;
        ar := Coef.Coefficients.Estimate;
        For i := 0 To ar.Length - 1 Do
            System.Diagnostics.Debug.WriteLine(ar[i]);
        End For;
        System.Diagnostics.Debug.Unindent();
        System.Diagnostics.Debug.WriteLine("Среднее логарифма функции правдоподобия: ");
        System.Diagnostics.Debug.Indent();
        Stat := binary.SummaryStatistics;
        System.Diagnostics.Debug.WriteLine(Stat.AvgLogL);
        System.Diagnostics.Debug.Unindent();
        System.Diagnostics.Debug.WriteLine("Ряд вероятностей");
        System.Diagnostics.Debug.Indent();
        Probabilities := binary.Probabilities;
        For i := 0 To Probabilities.Length - 1 Do
            System.Diagnostics.Debug.WriteLine((i + 1).ToString() + ". " + Probabilities[i].ToString());
        End For;
        System.Diagnostics.Debug.Unindent();
        System.Diagnostics.Debug.WriteLine("Ряд вероятностей для обучающих объектов");
        System.Diagnostics.Debug.Indent();
        ProbFitted := binary.ProbFitted;
        For i := 0 To ProbFitted.Length - 1 Do
            System.Diagnostics.Debug.WriteLine((i + 1).ToString() + ". " + ProbFitted[i].ToString());
        End For;
        System.Diagnostics.Debug.Unindent();
        // Выводим данные ROC-кривой
        System.Diagnostics.Debug.WriteLine("Данные ROC-кривой:");
        System.Diagnostics.Debug.Indent();
        System.Diagnostics.Debug.WriteLine("Специфичность:");
        System.Diagnostics.Debug.Indent();
        OneMinusSpecificity := ROCcurve.OneMinusSpecificity;
        For i := 0 To OneMinusSpecificity.Length - 1 Do
            System.Diagnostics.Debug.WriteLine(OneMinusSpecificity[i]);
        End For;
        System.Diagnostics.Debug.Unindent();
        System.Diagnostics.Debug.WriteLine("Чувствительность:");
        System.Diagnostics.Debug.Indent();
        Sensitivity := ROCcurve.Sensitivity;
        For i := 0 To Sensitivity.Length - 1 Do
            System.Diagnostics.Debug.WriteLine(Sensitivity[i]);
        End For;
        System.Diagnostics.Debug.Unindent();
        System.Diagnostics.Debug.WriteLine("Площадь под кривой: " + ROCcurve.Area.ToString());
        System.Diagnostics.Debug.WriteLine("Стандартная ошибка: " + ROCcurve.StdError.ToString());
        System.Diagnostics.Debug.WriteLine("Асимптотический доверительный интервал:");
        System.Diagnostics.Debug.Indent();
        System.Diagnostics.Debug.WriteLine("Нижняя граница: " + ROCcurve.ConfidenceIntervalLower.ToString());
        System.Diagnostics.Debug.WriteLine("Верхняя граница: " + ROCcurve.ConfidenceIntervalUpper.ToString());
        System.Diagnostics.Debug.Unindent();
        System.Diagnostics.Debug.WriteLine("Порог отсечения:");
        System.Diagnostics.Debug.Indent();
        CutOffPoints := ROCcurve.CutOffPoints;
        For i := 0 To CutOffPoints.Length - 1 Do
            System.Diagnostics.Debug.WriteLine(CutOffPoints[i]);
        End For;
        System.Diagnostics.Debug.Unindent();
        System.Diagnostics.Debug.Unindent();
    End If;
End Sub;

См. также:

ISmLogisticRegression