Spec-Zone.ru › TensorFlow 2.3

tf.keras.metrics.AUC

Просмотреть исходный код на GitHub

Вычисляет приблизительное значение AUC (Площадь под кривой) с помощью суммы Римана.

Наследуется от: Metric

Просмотр псевдонимов

Основные псевдонимы

tf.metrics.AUC

Псевдонимы совместимости для миграции

См. Руководство по миграции для получения дополнительной информации.

tf.compat.v1.keras.metrics.AUC

tf.keras.metrics.AUC(
    num_thresholds=200, curve='ROC', summation_method='interpolation', name=None,
    dtype=None, thresholds=None, multi_label=False, label_weights=None
)

Эта метрика создает четыре локальных переменных, true_positives, true_negatives, false_positives и false_negatives, которые используются для вычисления AUC. Для дискретизации кривой AUC используется набор линейно расположенных пороговых значений для вычисления пар значений отзыва и точности. Таким образом, площадь под ROC-кривой вычисляется по высоте значений отзыва по отношению к скорости ложных срабатываний, а площадь под кривой точности-отзыва вычисляется по высоте значений точности по отношению к отзыву.

Это значение в конечном итоге возвращается как 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 для маскирования значений.

Аргументы
num_thresholds (Необязательно) По умолчанию 200. Количество пороговых значений, используемых при дискретизации кривой roc. Значения должны быть > 1.
curve (Необязательно) Указывает имя вычисляемой кривой, 'ROC' [по умолчанию] или 'PR' для кривой точность-отзыв.
summation_method (Необязательно) Указывает метод суммирования Римана. 'interpolation' (по умолчанию) применяет схему суммирования по середине для ROC. Для PR-AUC интерполирует (истинные/ложные) положительные, но не соотношение, которое является точностью (см. Davis & Goadrich 2006 для получения подробностей); 'minoring' применяет левое суммирование для возрастающих интервалов и правое суммирование для убывающих интервалов; 'majoring' делает наоборот.
name (Необязательно) строковое имя экземпляра метрики.
dtype (Необязательно) тип данных результата метрики.
thresholds (Необязательно) Список чисел с плавающей запятой, используемых в качестве пороговых значений для дискретизации кривой. Если задано, параметр num_thresholds игнорируется. Значения должны быть в [0, 1]. Пороговые значения крайних точек, равные {-epsilon, 1+epsilon} для небольшого положительного значения epsilon, будут автоматически включены для правильной обработки предсказаний, равных точно 0 или 1.
multi_label логическое значение, указывающее, следует ли рассматривать данные с несколькими метками как такие, где AUC вычисляется отдельно для каждой метки, а затем усредняется по меткам, или (при False) если данные должны быть сглажены в одну метку перед вычислением AUC. В последнем случае, когда данные с несколькими метками передаются в AUC, каждая пара метка-предсказание рассматривается как отдельная точка данных. Должно быть установлено в False для данных с несколькими классами.
label_weights (необязательно) список, массив или тензор неотрицательных весов, используемых для вычисления AUC для данных с несколькими метками. Когда multi_label равно True, веса применяются к отдельным AUC меток при усреднении для получения AUC с несколькими метками. Когда это False, они используются для взвешивания отдельных предсказаний меток при вычислении матрицы неточностей на сглаженных данных. Обратите внимание, что это отличается от class_weights, так как class_weights взвешивает пример в зависимости от значения его метки, тогда как label_weights зависит только от индекса этой метки перед сглаживанием; поэтому label_weights не следует использовать для данных с несколькими классами.

Использование в автономном режиме:

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
m.result().numpy()
0.75
m.reset_states()
m.update_state([0, 0, 1, 1], [0, 0.5, 0.3, 0.9],
               sample_weight=[1, 0, 0, 1])
m.result().numpy()
1.0

Использование с API compile():

model.compile(optimizer='sgd', loss='mse', metrics=[tf.keras.metrics.AUC()])
Атрибуты
thresholds Пороговые значения, используемые для оценки AUC.

Методы

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/r2.3/api_docs/python/tf/keras/metrics/AUC

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API