tf.keras.metrics.AUC
| Просмотреть исходный код на GitHub |
Вычисляет приблизительное значение AUC (площадь под кривой) с помощью суммирования Римана.
Наследуется от: Metric
tf.keras.metrics.AUC(
num_thresholds=200, curve='ROC', summation_method='interpolation', name=None,
dtype=None, thresholds=None
)
Эта метрика создаёт четыре локальных переменных, true_positives, true_negatives, false_positives и false_negatives, которые используются для вычисления AUC. Для дискретизации кривой AUC используется линейно распределённый набор пороговых значений для вычисления пар значений отзыва и точности. Площадь под кривой ROC вычисляется по высоте значений отзыва относительно скорости ложноположительных результатов, а площадь под кривой PR вычисляется по высоте значений точности относительно отзыва.
Это значение в конечном итоге возвращается как auc, идемпотентная операция, которая вычисляет площадь под дискретизированной кривой точности по отношению к значениям отзыва (вычисленным с использованием упомянутых выше переменных). Переменная num_thresholds управляет степенью дискретизации, при большем количестве пороговых значений приближение к истинному значению AUC становится точнее. Качество приближения может существенно варьироваться в зависимости от num_thresholds. Параметр thresholds можно использовать для ручного задания пороговых значений, которые более равномерно распределяют предсказания.
Для достижения наилучших результатов, predictions должно быть распределено примерно равномерно в диапазоне [0, 1] и не должно иметь пиков вокруг 0 или 1. Качество приближения AUC может быть плохим, если это не так. Установка summation_method в 'minoring' или 'majoring' может помочь количественно оценить ошибку приближения, предоставив нижнюю или верхнюю оценку AUC.
Если sample_weight равно None, веса по умолчанию равны 1. Использование sample_weight со значением 0 для маскировки значений.
Использование:
m = tf.keras.metrics.AUC(num_thresholds=3)
m.update_state([0, 0, 1, 1], [0, 0.5, 0.3, 0.9])
# threshold values are [0 - 1e-7, 0.5, 1 + 1e-7]
# tp = [2, 1, 0], fp = [2, 0, 0], fn = [0, 1, 2], tn = [0, 2, 2]
# recall = [1, 0.5, 0], fp_rate = [1, 0, 0]
# auc = ((((1+0.5)/2)*(1-0))+ (((0.5+0)/2)*(0-0))) = 0.75
print('Final result: ', m.result().numpy()) # Final result: 0.75
Использование с API tf.keras:
model = tf.keras.Model(inputs, outputs)
model.compile('sgd', loss='mse', metrics=[tf.keras.metrics.AUC()])
| Аргументы | |
|---|---|
num_thresholds | (Необязательно) По умолчанию равно 200. Количество пороговых значений для дискретизации кривой ROC. Значения должны быть > 1. |
curve | (Необязательно) Указывает имя вычисляемой кривой, 'ROC' [по умолчанию] или 'PR' для кривой точности-полноты. |
summation_method | (Необязательно) Указывает метод суммирования Римана, используемый (https://en.wikipedia.org/wiki/Riemann_sum): 'interpolation' [по умолчанию], применяется схема суммирования по средним точкам для ROC. Для PR-AUC интерполирует (истинные/ложные) положительные значения, но не отношение, которое является точностью (см. Davis & Goadrich 2006 для получения подробностей); 'minoring', который применяет левое суммирование для возрастающих интервалов и правое суммирование для убывающих интервалов; 'majoring', который делает обратное. |
name | (Необязательно) Строковое имя экземпляра метрики. |
dtype | (Необязательно) Тип данных результата метрики. |
thresholds | (Необязательно) Список чисел с плавающей запятой, используемых в качестве пороговых значений для дискретизации кривой. Если задано, параметр num_thresholds игнорируется. Значения должны быть в [0, 1]. Пороговые значения конечных точек, равные {-epsilon, 1+epsilon} для небольшого положительного значения epsilon, будут автоматически включены, чтобы корректно обрабатывать предсказания, равные точно 0 или 1. |
Методы
interpolate_pr_auc
interpolate_pr_auc()
Формула интерполяции, вдохновлённая разделом 4 статьи Davis & Goadrich 2006.
https://www.biostat.wisc.edu/~page/rocpr.pdf
Здесь мы выводим и используем замкнутую формулу, отсутствующую в статье, следующим образом:
Точность = ИП / (ИП + ЛП) = ИП / П
Моделируя все ИП (истинные положительные), ЛП (ложные положительные) и их сумму П = ИП + ЛП (предсказанные положительные) как линейно изменяющиеся внутри каждого интервала [A, B] между последовательными пороговыми значениями, мы получаем
Наклон точности = dИП / dП = (ИП_В - ИП_А) / (П_В - П_А) = (ИП - ИП_А) / (П - П_А) Точность = (ИП_А + наклон * (П - П_А)) / П
Площадь внутри интервала равна (наклон / общий_вес_положительных) умноженному на
int_A^B{Точность.dП} = int_A^B{(ИП_А + наклон * (П - П_А)) * dП / П} int_A^B{Точность.dП} = int_A^B{наклон * dП + перехват * dП / П}
где перехват = ИП_А - наклон * П_А = ИП_В - наклон * П_В, что приводит к
int_A^B{Точность.dП} = ИП_В - ИП_А + перехват * log(П_В / П_А)
Возвращая множитель (наклон / общий_вес_положительных), который мы отложили, мы получаем
наклон * [dИП + перехват * log(П_В / П_А)] / общий_вес_положительных
где dИП == ИП_В - ИП_А.
Обратите внимание, что когда П_А == 0, вышеприведённое вычисление упрощается до
int_A^B{Точность.dИП} = int_A^B{наклон * dИП} = наклон * (ИП_В - ИП_А)
что на самом деле эквивалентно подстановке постоянной точности в течение первого интервала с >0 истинными положительными значениями.
| Возвращаемое значение | |
|---|---|
pr_auc | приближение площади под кривой точности-полноты. |
reset_states
reset_states()
Сбрасывает все переменные состояния метрики.
Эта функция вызывается между эпохами/шагами, когда метрика оценивается во время обучения.
result
result()
Вычисляет и возвращает тензор значения метрики.
Вычисление результата — это идемпотентная операция, которая просто вычисляет значение метрики, используя переменные состояния.
update_state
update_state(
y_true, y_pred, sample_weight=None
)
Накапливает статистику матрицы несоответствия.
| Аргументы | |
|---|---|
y_true | Значения фактического результата. |
y_pred | Значения предсказаний. |
sample_weight | Необязательные веса каждого примера. По умолчанию 1. Может быть Tensor, ранг которого равен 0 или совпадает с рангом y_true, и должен быть совместим для трансляции с y_true. |
| Возвращаемое значение | |
|---|---|
| Операция обновления. |
© 2020 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 3.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r1.15/api_docs/python/tf/keras/metrics/AUC