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, 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