1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/Python_Ai_Road-eat_tensorflow2_in_30_days

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Chapter5-6.md 11 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 03.12.2024 15:14 374a95e

5-6 метрик

Помимо использования в качестве цели оптимизации во время обучения, функция потерь также выступает в роли оценочного показателя производительности модели. Однако в целом производительность модели оценивается с помощью других показателей.

Это показатели оценки. Функция потерь может использоваться как показатель. MAE, MSE, CategoricalCrossentropy — одни из наиболее распространённых показателей.

Однако показатели не обязательно могут выступать в роли функции потерь, такие как AUC, Accuracy, Precision. Это связано с тем, что показатели не обязаны быть непрерывно дифференцируемыми, в то время как это общее требование для функции потерь.

Несколько показателей можно указать через список во время компиляции модели.

При необходимости показатели можно настроить.

Для пользовательских показателей в качестве входных данных требуются два тензора y_true и y_pred, а на выходе получается скалярное значение рассчитанного показателя.

Также можно настроить показатели, унаследовав их от базового класса tf.keras.metrics.Metric и переписав методы init, update_state и result для реализации расчёта показателей.

Обычно обучение выполняется пакетно, а показатели рассчитываются только после целой эпохи, поэтому показатели на уровне классов более популярны. Нам нужно написать метод инициализации для создания необходимых промежуточных переменных (они связаны с результирующими показателями), написать метод update_state для обновления состояний этих промежуточных переменных после каждого пакета и написать метод result для окончательного вывода.

Если показатель записан как функция, то в качестве общего показателя можно использовать только усреднённый показатель по всем пакетам в эпохе. Обычно это отличается от результата, рассчитанного на всех этапах обучения в эпоху.

1. Наиболее часто используемые предопределённые показатели

  • MeanSquaredError (Среднеквадратичная ошибка, используется для регрессии, получила название «MSE», имя функции mse).

  • MeanAbsoluteError (Средняя абсолютная ошибка, используется для регрессии, получила название «MAE», имя функции mae).

  • MeanAbsolutePercentageError (Средняя процентная абсолютная ошибка, используется для регрессии, получила название «MAPE», имя функции mape).

  • RootMeanSquaredError (Среднеквадратическая ошибка корня, используется для регрессии).

  • Accuracy (Точность, используется для классификации, может быть представлена в виде строки «Accuracy»; Точность = (TP + TN) / (TP + TN + FP + FN); требуется порядковое кодирование для входных данных y_true и y_pred).

  • Precision (Точность, используется для двоичной классификации; Точность = TP / (TP + FP)).

  • Recall (Коэффициент отзыва, используется для двоичной классификации; Отзыв = TP / (TP + FN)).

  • TruePositives (Истинные положительные результаты, используются для двоичной классификации).

  • TrueNegatives (Истинные отрицательные результаты, используются для двоичной классификации).

  • FalsePositives (Ложные срабатывания, используются для двоичной классификации).

  • FalseNegatives (Ложноотрицательные результаты, используются для двоичной классификации).

  • AUC (Площадь под кривой, представляет площадь под кривой ROC (TPR против FPR); используется для двоичной классификации. Интуитивное объяснение: выберите положительный образец и отрицательный образец, AUC — это вероятность того, что прогноз положительного образца больше прогноза отрицательного образца).

  • CategoricalAccuracy (Категориальная точность, аналогична Accuracy, за исключением требования однократного кодирования для входной метки y_true).

  • SparseCategoricalAccuracy (Разреженная категориальная точность, аналогично Accuracy, за исключением требования порядкового кодирования для метки y_true).

  • MeanIoU (Пересечение над объединением, обычно используется для сегментации изображений).

  • TopKCategoricalAccuracy (Точность TopK для множественной классификации, требуется однократное кодирование для входной метки y_true).

  • SparseTopKCategoricalAccuracy (Точность TopK для множественной классификации, требуется обычное кодирование для входной метки y_true).

  • Mean (Среднее значение).

  • Sum (Суммация).

2. Настраиваемые показатели

Здесь мы используем статистику K-S (Колмогорова-Смирнова), которая часто используется в управлении финансовыми рисками, в качестве примера настраиваемых показателей.

Статистика K-S используется для задач двоичной классификации; KS = max(TPR - FPR), где TPR = TP / (TP + FN), FPR = FP / (FP Кривая TPR — это кумулятивная функция распределения (CDF) положительных образцов, а кривая FPR — CDF отрицательных образцов.

Статистика K-S — это максимум разности между CDF положительных и отрицательных выборок.

import numpy as np
import pandas as pd
import tensorflow as tf
from tensorflow.keras import layers,models,losses,metrics

# Пользовательские метрики, определённые функцией
@tf.function
def ks(y_true,y_pred):
    y_true = tf.reshape(y_true,(-1,))
    y_pred = tf.reshape(y_pred,(-1,))
    length = tf.shape(y_true)[0]
    t = tf.math.top_k(y_pred,k = length,sorted = False)
    y_pred_sorted = tf.gather(y_pred,t.indices)
    y_true_sorted = tf.gather(y_true,t.indices)
    cum_positive_ratio = tf.truediv(
        tf.cumsum(y_true_sorted),tf.reduce_sum(y_true_sorted))
    cum_negative_ratio = tf.truediv(
        tf.cumsum(1 - y_true_sorted),tf.reduce_sum(1 - y_true_sorted))
    ks_value = tf.reduce_max(tf.abs(cum_positive_ratio - cum_negative_ratio)) 
    return ks_value
y_true = tf.constant([[1],[1],[1],[0],[1],[1],[1],[0],[0],[0],[1],[0],[1],[0]])
y_pred = tf.constant([[0.6],[0.1],[0.4],[0.5],[0.7],[0.7],[0.7],
                      [0.4],[0.4],[0.5],[0.8],[0.3],[0.5],[0.3]])
tf.print(ks(y_true,y_pred))
0.625
# Пользовательская метрика, определённая классом
class KS(metrics.Metric):
    
    def __init__(self, name = "ks", **kwargs):
        super(KS,self).__init__(name=name,**kwargs)
        self.true_positives = self.add_weight(
            name = "tp",shape = (101,), initializer = "zeros")
        self.false_positives = self.add_weight(
            name = "fp",shape = (101,), initializer = "zeros")
   
    @tf.function
    def update_state(self,y_true,y_pred):
        y_true = tf.cast(tf.reshape(y_true,(-1,)),tf.bool)
        y_pred = tf.cast(100*tf.reshape(y_pred,(-1,)),tf.int32)
        
        for i in tf.range(0,tf.shape(y_true)[0]):
            if y_true[i]:
                self.true_positives[y_pred[i]].assign(
                    self.true_positives[y_pred[i]]+1.0)
            else:
                self.false_positives[y_pred[i]].assign(
                    self.false_positives[y_pred[i]]+1.0)
        return (self.true_positives,self.false_positives)
    
    @tf.function
    def result(self):
        cum_positive_ratio = tf.truediv(
            tf.cumsum(self.true_positives),tf.reduce_sum(self.true_positives))
        cum_negative_ratio = tf.truediv(
            tf.cumsum(self.false_positives),tf.reduce_sum(self.false_positives))
        ks_value = tf.reduce_max(tf.abs(cum_positive_ratio - cum_negative_ratio)) 
        return ks_value
y_true = tf.constant([[1],[1],[1],[0],[1],[1],[1],[0],[0],[0],[1],[0],[1],[0]])
y_pred = tf.constant([[0.6],[0.1],[0.4],[0.5],[0.7],[0.7],
                      [0.7],[0.4],[0.4],[0.5],[0.8],[0.3],[0.5],[0.3]])

myks = KS()
myks.update_state(y_true,y_pred)
tf.print(myks.result())
0.625

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/Python_Ai_Road-eat_tensorflow2_in_30_days.git
git@api.gitlife.ru:oschina-mirror/Python_Ai_Road-eat_tensorflow2_in_30_days.git
oschina-mirror
Python_Ai_Road-eat_tensorflow2_in_30_days
Python_Ai_Road-eat_tensorflow2_in_30_days
master