tf.keras.metrics.AUC
| Просмотреть исходный код на GitHub |
Приближает AUC (площадь под кривой) ROC- или PR-кривых.
Наследуется от: Metric, Layer, Module
tf.keras.metrics.AUC(
num_thresholds=200,
curve='ROC',
summation_method='interpolation',
name=None,
dtype=None,
thresholds=None,
multi_label=False,
num_labels=None,
label_weights=None,
from_logits=False
)
AUC (площадь под кривой) ROC- (по умолчанию) или PR-кривых (точность-полнота) являются показателями качества бинарных классификаторов. В отличие от точности и аналогично потерям перекрестной энтропии, ROC-AUC и PR-AUC оценивают все рабочие точки модели.
Этот класс приближает AUC, используя сумму Римана. Во время накопления метрики предсказания накапливаются в предопределённых корзинах по значениям. AUC затем вычисляется путём интерполяции средних значений по корзинам. Эти корзины определяют оцениваемые рабочие точки.
Эта метрика создаёт четыре локальных переменных, true_positives, true_negatives, false_positives и false_negatives, которые используются для вычисления AUC. Для дискретизации кривой AUC используется линейно распределённый набор пороговых значений для вычисления пар значений полноты и точности. Таким образом, площадь под ROC-кривой вычисляется с помощью высоты значений полноты по отношению к доле ложноположительных результатов, а площадь под PR-кривой вычисляется с помощью высоты значений точности по отношению к полноте.
Это значение в конечном итоге возвращается как auc, идемпотентная операция, которая вычисляет площадь под дискретизированной кривой точности по отношению к полноте (вычисленной с использованием упомянутых выше переменных). Переменная num_thresholds контролирует степень дискретизации, при большем количестве пороговых значений приближение к истинному AUC становится более точным. Качество приближения может существенно варьироваться в зависимости от num_thresholds. Параметр thresholds может использоваться для ручного задания пороговых значений, которые более равномерно распределяют предсказания.
Для лучшего приближения реального AUC, predictions должно быть распределено примерно равномерно в диапазоне 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 для данных с несколькими классами. |
num_labels | (Необязательно) Количество меток, используется, когда multi_label равно True. Если num_labels не указано, то переменные состояния создаются при первом вызове update_state. |
label_weights | (Необязательно) список, массив или тензор неотрицательных весов, используемых для вычисления AUC для многозначных данных. Когда multi_label равно True, веса применяются к отдельным меткам AUC при усреднении для получения многозначного AUC. Когда это False, они используются для взвешивания отдельных предсказаний меток при вычислении матрицы ошибок на сглаженных данных. Обратите внимание, что это отличается от class_weights, так как class_weights взвешивает пример в зависимости от значения его метки, а label_weights зависит только от индекса этой метки до сглаживания; поэтому label_weights не следует использовать для данных с несколькими классами. |
from_logits | логическое значение, указывающее, являются ли предсказания (y_pred в update_state) вероятностями или сигмоидальными логарифмами. Как правило, при использовании keras-потерь, аргумент конструктора from_logits потери должен соответствовать аргументу конструктора from_logits AUC. |
Использование автономно:
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] # tp_rate = 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_state()
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():
# Reports the AUC of a model outputting a probability.
model.compile(optimizer='sgd',
loss=tf.keras.losses.BinaryCrossentropy(),
metrics=[tf.keras.metrics.AUC()])
# Reports the AUC of a model outputting a logit.
model.compile(optimizer='sgd',
loss=tf.keras.losses.BinaryCrossentropy(from_logits=True),
metrics=[tf.keras.metrics.AUC(from_logits=True)])
| Атрибуты | |
|---|---|
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. |
merge_state
merge_state(
metrics
)
Объединяет состояние из одной или нескольких метрик.
Этот метод может использоваться распределёнными системами для объединения состояния, вычисленного различными экземплярами метрики. Как правило, состояние будет храниться в виде весов метрики. Например, метрика tf.keras.metrics.Mean содержит список из двух значений веса: общий и счёт. Если было два экземпляра tf.keras.metrics.Accuracy, каждый из которых независимо аккумулировал частичное состояние для расчёта общей точности, эти два состояния метрик можно объединить следующим образом:
m1 = tf.keras.metrics.Accuracy() _ = m1.update_state([[1], [2]], [[0], [2]])
m2 = tf.keras.metrics.Accuracy() _ = m2.update_state([[3], [4]], [[3], [4]])
m2.merge_state([m1]) m2.result().numpy() 0.75
| Аргументы | |
|---|---|
metrics | итерируемый объект метрик. Метрики должны иметь совместимое состояние. |
| Исключения | |
|---|---|
ValueError | Если предоставленный итерируемый объект не содержит метрик, соответствующих требуемым характеристикам метрики. |
reset_state
reset_state()
Сбрасывает все переменные состояния метрики.
Эта функция вызывается между эпохами/шагами, когда метрика оценивается во время обучения.
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. |
| Возвращаемое значение | |
|---|---|
| Операция обновления. |
© 2022 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 4.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r2.9/api_docs/python/tf/keras/metrics/AUC