Spec-Zone.ru › TensorFlow

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
)

Используется в блокнотах

Используется в учебниках
  • Классификация на несбалансированных данных
  • Эффективное для клиентов обучение на больших моделях по методу федеративного обучения с помощью `federated_select` и разреженной агрегации

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

Spec-Zone.ru

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