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 в значение 'minoring' или 'majoring' помогает оценить погрешность аппроксимации, задавая нижнюю или верхнюю границу AUC.
Если sample_weight равно None, веса по умолчанию равны 1. Используйте sample_weight со значением 0, чтобы исключить значения из расчёта.
| Аргументы | |
|---|---|
num_thresholds | (Необязательно) Количество пороговых значений, используемых при дискретизации ROC-кривой. Значения должны быть > 1. По умолчанию равно 200. |
curve | (Необязательно) Задаёт имя вычисляемой кривой: 'ROC' (по умолчанию) или 'PR' для кривой точности-полноты. |
summation_method | (Необязательно) Задаёт используемый метод суммирования Римана. 'interpolation' (по умолчанию) применяет схему суммирования по средним точкам для ROC. Для PR-AUC интерполируются положительные и отрицательные результаты (true/false), но не отношение, соответствующее точности (подробности см. в 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}
где intercept = TP_A - slope * P_A = TP_B - slope * P_B, в результате чего получаем
int_A^B{Precision.dP} = TP_B - TP_A + intercept * log(P_B / P_A)
Возвращая множитель (slope / общий вес положительных результатов), который мы отложили, получаем
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 | аппроксимацию площади под PR-кривой. |
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