Понимание кривой ROC - PullRequest
       41

Понимание кривой ROC

0 голосов
/ 04 сентября 2018
import matplotlib.pyplot as plt
from sklearn.metrics import roc_curve, auc , roc_auc_score
import numpy as np

correct_classification = np.array([0,1])
predicted_classification = np.array([1,1])

false_positive_rate, true_positive_rate, tresholds = roc_curve(correct_classification, predicted_classification)

print(false_positive_rate)
print(true_positive_rate)

С https://en.wikipedia.org/wiki/Sensitivity_and_specificity:

True positive: Sick people correctly identified as sick 
False positive: Healthy people incorrectly identified as sick 
True negative: Healthy people correctly identified as healthy 
False negative: Sick people incorrectly identified as healthy

Я использую эти значения 0: больной, 1: здоровый

С https://en.wikipedia.org/wiki/False_positive_rate:

частота положительных результатов = ложно положительная / (ложно положительная + истинно отрицательная)

количество ложных срабатываний: 0 число истинно отрицательных: 1

следовательно, процент ложных срабатываний = 0/0 + 1 = 0

Чтение возвращаемого значения для roc_curve (http://scikit -learn.org / stable / modules / generate / sklearn.metrics.roc_curve.html # sklearn.metrics.roc_curve ):

fpr: массив, форма = [> 2]

Увеличение числа ложных срабатываний, так что элемент i является ложным положительный показатель прогнозов с оценкой> = пороговые значения [i].

tpr: массив, форма = [> 2]

Увеличение истинно положительных показателей, так что элемент i является истинным положительный показатель прогнозов с оценкой> = пороговые значения [i].

пороги: массив, форма = [n_thresholds]

Уменьшение пороговых значений для функции принятия решения, используемой для вычисления fpr и TPR. Порог [0] не представляет прогнозируемых случаев и является произвольно установлен на макс (y_score) + 1.

Как это отличается от моего ручного расчета частоты ложных срабатываний? Как устанавливаются пороги? Некоторая информация о режиме пороговых значений приведена здесь: https://datascience.stackexchange.com/questions/806/advantages-of-auc-vs-standard-accuracy, но я не совсем понимаю, как она вписывается в эту реализацию?

Ответы [ 2 ]

0 голосов
/ 04 сентября 2018

Во-первых, Википедия рассматривает больных = 1.

Истинно положительно: больные люди правильно определены как больные

Во-вторых, у каждой модели есть некоторый порог, основанный на вероятностях положительного класса (обычно 0,5).

Таким образом, если пороговое значение равно 0,1, все выборки с вероятностями, превышающими 0,1, будут классифицироваться как положительные. Вероятности предсказанных выборок являются фиксированными, и пороговые значения будут варьироваться.

В roc_curve scikit-learn увеличивает пороговое значение с:

 0 (or minimum value where all the predictions are positive) 

до

1 (Or the last point where all predictions become negative).

Промежуточные баллы определяются на основе изменения прогнозов с положительного на отрицательный.

Пример:

Sample 1      0.2
Sample 2      0.3
Sample 3      0.6
Sample 4      0.7
Sample 5      0.8

Самая низкая вероятность здесь равна 0,2, поэтому минимальный порог, чтобы иметь смысл, равен 0,2. Теперь, когда мы продолжаем увеличивать порог, так как в этом примере очень мало точек, пороговые точки будут меняться при каждой вероятности (и равны этой вероятности, потому что это точка, где меняется количество положительных и отрицательных сторон)

                     Negative    Positive
               <0.2     0          5
Threshold1     >=0.2    1          4
Threshold2     >=0.3    2          3
Threshold3     >=0.6    3          2
Threshold4     >=0.7    4          1
Threshold5     >=0.8    5          0
0 голосов
/ 04 сентября 2018

enter image description here

на демонстрации выше, порогом является оранжевая полоса. Распределение класса 00 выделено красным цветом (вывод классификатора), а распределение класса 1 выделено синим цветом (то же самое, пробное распределение выхода классификатора). он работает с вероятностью нахождения в одном или другом классе: если у одной выборки есть [0,34,0,66] выхода, то порог 0,25 для класса 1 поместит его в класс 1, даже если проба 0,66 выше.

Вы не работаете на кривой ROC с классами, но с вероятностью нахождения в классе.

Я надеюсь, что он отвечает на вопрос (извините, если нет, я буду более точным, если это необходимо)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...