tf.keras.metrics.AUC
Приближает AUC (площадь под кривой) ROC или PR кривых.
Наследуется от: Metric
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] (если from_logits=False). Качество приближения AUC может быть плохим, если это не так. Установка summation_method в «минимизацию» или «максимизацию» может помочь оценить ошибку приближения, предоставив нижнюю или верхнюю оценку AUC.
Если sample_weight равно None, веса по умолчанию равны 1. Используйте sample_weight значения 0, чтобы маскировать значения.
| Аргументы | |
|---|---|
num_thresholds | (Необязательно) Количество пороговых значений, используемых при дискретизации кривой ROC. Значения должны быть > 1. По умолчанию 200. |
curve | (Необязательно) Указывает имя вычисляемой кривой, 'ROC' (по умолчанию) или 'PR' для кривой точность-полнота. |
summation_method | (Необязательно) Указывает метод суммирования Римана. 'interpolation' (по умолчанию) применяет схему суммирования по середине для ROC. Для PR-AUC интерполирует (истинные/ложные) положительные, но не отношение, которое является точностью (см. Davis & Goadrich 2006 для получения подробной информации); 'minoring' применяет левое суммирование для возрастающих интервалов и правое суммирование для убывающих интервалов; 'majoring' делает обратное. |
name | (Необязательно) Строковое имя экземпляра метрики. |
dtype | (Необязательно) Тип данных результата метрики. |
thresholds | (Необязательно) Список чисел с плавающей запятой, используемых в качестве пороговых значений для дискретизации кривой. Если установлено, параметр num_thresholds игнорируется. Значения должны быть в [0, 1]. Пороговые значения конечных точек равны {-epsilon, 1+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 = 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() 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()
1.0Использование с API compile():
# Reports the AUC of a model outputting a probability.
model.compile(optimizer='sgd',
loss=keras.losses.BinaryCrossentropy(),
metrics=[keras.metrics.AUC()])
# Reports the AUC of a model outputting a logit.
model.compile(optimizer='sgd',
loss=keras.losses.BinaryCrossentropy(from_logits=True),
metrics=[keras.metrics.AUC(from_logits=True)])
| Атрибуты | |
|---|---|
dtype | |
thresholds | Пороговые значения, используемые для оценки AUC. |
variables | |
Методы
add_variable
add_variable(
shape, initializer, dtype=None, aggregation='sum', name=None
)
add_weight
add_weight(
shape=(), initializer=None, dtype=None, name=None
)
from_config
@classmethod
from_config(
config
)
get_config
get_config()
Возвращает сериализуемую конфигурацию метрики.
interpolate_pr_auc
interpolate_pr_auc()
Формула интерполяции, вдохновлённая разделом 4 из Davis & Goadrich 2006.
https://www.biostat.wisc.edu/~page/rocpr.pdf
Обратите внимание, что здесь мы выводим и используем замкнутую формулу, отсутствующую в статье, следующим образом:
Precision = TP / (TP + FP) = TP / P
Моделью всех TP (истинно положительных), FP (ложно положительных) и их суммы P = TP + FP (предсказанные положительные) как линейно изменяющихся в каждом интервале [A, B] между последовательными пороговыми значениями, мы получаем
Precision slope = dTP / dP
= (TP_B - TP_A) / (P_B - P_A)
= (TP - TP_A) / (P - P_A)
Precision = (TP_A + slope * (P - P_A)) / P
Площадь внутри интервала равна (наклон / общий_вес_положительных) умножить на
int_A^B{Precision.dP} = int_A^B{(TP_A + slope * (P - P_A)) * dP / P}
int_A^B{Precision.dP} = int_A^B{slope * dP + intercept * dP / P}
где пересечение = TP_A - наклон * P_A = TP_B - наклон * P_B, что приводит к
int_A^B{Precision.dP} = TP_B - TP_A + intercept * log(P_B / P_A)
Возвращая множитель (наклон / общий_вес_положительных), который мы отложили, мы получаем
slope * [dTP + intercept * log(P_B / P_A)] / total_pos_weight
где dTP == TP_B - TP_A.
Обратите внимание, что при P_A == 0 вышеупомянутое вычисление упрощается в
int_A^B{Precision.dTP} = int_A^B{slope * dTP}
= slope * (TP_B - TP_A)
что на самом деле эквивалентно присвоению постоянной точности на протяжении всей первой корзины, имеющей >0 истинных положительных.
| Возвращает | |
|---|---|
pr_auc | приближение площади под кривой P-R. |
reset_state
reset_state()
Сбросьте все переменные состояния метрики.
Эта функция вызывается между эпохами/шагами, когда метрика оценивается во время обучения.
result
result()
Вычислить текущее значение метрики.
| Возвращает | |
|---|---|
| Скалярный тензор или словарь скалярных тензоров. |
stateless_reset_state
stateless_reset_state()
stateless_result
stateless_result(
metric_variables
)
stateless_update_state
stateless_update_state(
metric_variables, *args, **kwargs
)
update_state
update_state(
y_true, y_pred, sample_weight=None
)
Накапливает статистику матрицы неточностей.
| Аргументы | |
|---|---|
y_true | Значения истинного класса. |
y_pred | Предсказанные значения. |
sample_weight | Необязательное взвешивание каждого примера. Может быть тензором, ранг которого равен 0 или совпадает с рангом y_true, и должен быть совместим с y_true. По умолчанию 1. |
__call__
__call__(
*args, **kwargs
)
Вызов self как функции.
© 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/api_docs/python/tf/keras/metrics/AUC