Spec-Zone.ru › TensorFlow 2.4

tf.keras.metrics.AUC

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

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

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

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

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

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 вычисляется с помощью высоты значений отзыва по отношению к скорости ложноположительных результатов, а площадь под кривой 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 для маскирования значений.

Аргументы
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П = (ИП_B - ИП_A) / (П_B - П_A) = (ИП - ИП_A) / (П - П_A) Точность = (ИП_A + наклон * (П - П_A)) / П

Площадь внутри интервала равна (наклон / общий_вес_положительных) умноженному на

int_A^B{Точность.dП} = int_A^B{(ИП_A + наклон * (П - П_A)) * dП / П} int_A^B{Точность.dП} = int_A^B{наклон * dП + перехват * dП / П}

где перехват = ИП_A - наклон * П_A = ИП_B - наклон * П_B, что приводит к

int_A^B{Точность.dП} = ИП_B - ИП_A + перехват * log(П_B / П_A)

Возвращая коэффициент (наклон / общий_вес_положительных), который мы отложили, мы получаем

наклон * [dИП + перехват * log(П_B / П_A)] / общий_вес_положительных

где dИП == ИП_B - ИП_A.

Обратите внимание, что когда П_A == 0, вышеуказанное вычисление упрощается до

int_A^B{Точность.dИП} = int_A^B{наклон * dИП} = наклон * (ИП_B - ИП_A)

что действительно эквивалентно импутированию постоянной точности в течение первого контейнера с >0 истинными положительными значениями.

Возвращаемое значение
pr_auc приближение площади под кривой P-R.

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

Spec-Zone.ru

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