class_likelihood_ratios#

sklearn.metrics.class_likelihood_ratios(y_true, y_pred, *, метки=None, sample_weight=None, raise_warning='устаревший', replace_undefined_by=nan)[источник]#

Вычислить положительные и отрицательные отношения правдоподобия для бинарной классификации.

Положительное отношение правдоподобия равно LR+ = sensitivity / (1 - specificity) где чувствительность или полнота - это отношение tp / (tp + fn) и специфичность равна tn / (tn + fp). Отрицательное отношение правдоподобия равно LR- = (1 - sensitivity) / specificity. Здесь tp это количество истинно положительных случаев, fp количество ложных срабатываний, tn это количество истинно отрицательных и fn количество ложноотрицательных результатов. Оба отношения правдоподобия классов могут быть использованы для получения вероятностей после теста при заданной вероятности до теста.

LR+ диапазон от 1.0 до бесконечности. LR+ значение 1.0 указывает, что вероятность предсказания положительного класса одинакова для образцов, принадлежащих любому из классов; следовательно, тест бесполезен. Чем больше LR+ тем больше вероятность, что положительное предсказание является истинно положительным по сравнению с вероятностью до теста. Значение LR+ ниже 1.0 недопустимо, так как это указывало бы, что шансы образца быть истинно положительным уменьшаются относительно предтестовых шансов.

LR- диапазон от 0.0 до 1.0. Чем ближе к 0.0, тем ниже вероятность того, что данная выборка является ложным отрицанием. A LR- значение 1.0 означает, что тест бесполезен, поскольку шансы наличия условия не изменились после теста. Значение LR- больше 1.0 делает классификатор недействительным, так как это указывает на увеличение шансов принадлежности образца к положительному классу после классификации как отрицательного. Это происходит, когда классификатор систематически предсказывает противоположное истинной метке.

Типичное применение в медицине — определить положительный/отрицательный класс как наличие/отсутствие заболевания соответственно; классификатором является диагностический тест; априорная вероятность наличия заболевания у индивида может быть распространенностью этого заболевания (доля определенной популяции, страдающей от данного медицинского состояния); апостериорные вероятности будут вероятностью того, что состояние действительно присутствует при положительном результате теста.

Подробнее в Руководство пользователя.

Параметры:
y_true1d array-like, или массив индикаторов меток / разреженная матрица

Истинные (правильные) целевые значения. Разреженная матрица поддерживается только когда цели имеют многометочный тип.

y_pred1d array-like, или массив индикаторов меток / разреженная матрица

Оцененные цели, возвращаемые классификатором. Разреженная матрица поддерживается только когда цели имеют многометочный тип.

меткиarray-like, default=None

Список меток для индексации матрицы. Может использоваться для выбора положительных и отрицательных классов с заданным порядком labels=[negative_class, positive_class]. Если None задано, те, которые появляются хотя бы раз в y_true или y_pred используются в отсортированном порядке.

sample_weightarray-like формы (n_samples,), по умолчанию=None

Веса выборок.

raise_warningbool, по умолчанию=True

Выводится ли специфичное для случая предупреждение при делении на ноль.

Устарело с версии 1.7: raise_warning был устаревшим в версии 1.7 и будет удалён в 1.9, когда UndefinedMetricWarning всегда будет вызывать исключение в случае деления на ноль.

replace_undefined_bynp.nan, 1.0 или dict, по умолчанию=np.nan

Устанавливает возвращаемые значения для LR+ и LR- при делении на ноль. Может принимать следующие значения:

  • np.nan для возврата np.nan для обоих LR+ и LR-

  • 1.0 для возврата наихудших возможных оценок: {"LR+": 1.0, "LR-": 1.0}

  • словарь в формате {"LR+": value_1, "LR-": value_2} где значения могут быть неотрицательными числами с плавающей точкой, np.inf или np.nan в диапазоне отношений правдоподобия. Например, {"LR+": 1.0, "LR-": 1.0} может использоваться для возврата худших оценок, указывающих на бесполезную модель, и {"LR+": np.inf, "LR-": 0.0} может использоваться для возврата лучших оценок, указывающих на полезную модель.

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

Добавлено в версии 1.7.

Возвращает:
(positive_likelihood_ratio, negative_likelihood_ratio)кортеж из float

Кортеж из двух чисел с плавающей запятой, первое содержит положительное отношение правдоподобия (LR+) и второе — отрицательное отношение правдоподобия (LR-).

Предупреждает:
Вызывает UndefinedMetricWarning когда y_true и
y_pred приводит к следующим условиям:
  • Количество ложных срабатываний равно 0, и raise_warning установлено в True (по умолчанию): положительное отношение правдоподобия не определено.

  • Количество истинно отрицательных равно 0 и raise_warning установлено в True (по умолчанию): отрицательное отношение правдоподобия не определено.

  • Сумма истинно положительных и ложно отрицательных результатов равна 0 (в выборке отсутствуют образцы положительного класса). y_true): оба отношения правдоподобия не определены.

Для первых двух случаев неопределенная метрика может быть определена путем установки replace_undefined_by параметр.

Ссылки

Примеры

>>> import numpy as np
>>> from sklearn.metrics import class_likelihood_ratios
>>> class_likelihood_ratios([0, 1, 0, 1, 0], [1, 1, 0, 0, 0])
(1.5, 0.75)
>>> y_true = np.array(["non-cat", "cat", "non-cat", "cat", "non-cat"])
>>> y_pred = np.array(["cat", "cat", "non-cat", "non-cat", "non-cat"])
>>> class_likelihood_ratios(y_true, y_pred)
(1.33, 0.66)
>>> y_true = np.array(["non-zebra", "zebra", "non-zebra", "zebra", "non-zebra"])
>>> y_pred = np.array(["zebra", "zebra", "non-zebra", "non-zebra", "non-zebra"])
>>> class_likelihood_ratios(y_true, y_pred)
(1.5, 0.75)

Чтобы избежать неоднозначностей, используйте обозначение labels=[negative_class, positive_class]

>>> y_true = np.array(["non-cat", "cat", "non-cat", "cat", "non-cat"])
>>> y_pred = np.array(["cat", "cat", "non-cat", "non-cat", "non-cat"])
>>> class_likelihood_ratios(y_true, y_pred, labels=["non-cat", "cat"])
(1.5, 0.75)