Delinear una clase más pequeña con la función de pérdida personalizada: hacia la IA

Estás leyendo la publicación: Delinear una clase más pequeña con la función de pérdida personalizada: hacia la IA

Publicado originalmente en Hacia la IA, la empresa líder mundial en noticias y medios de IA y tecnología. Si está creando un producto o servicio relacionado con la IA, lo invitamos a considerar convertirse en patrocinador de la IA. En Hacia la IA, ayudamos a escalar las empresas emergentes de IA y tecnología. Permítanos ayudarlo a dar rienda suelta a su tecnología a las masas.

Una breve guía para aprovechar al máximo la clasificación cuando se trata de conjuntos de datos desequilibrados

¿Por qué utilizar una función de pérdida personalizada?

Puede haber situaciones en las que la métrica de precisión sea insuficiente para obtener los resultados esperados. Es posible que deseemos reducir la tasa de falsos negativos (FN) o falsos positivos (FP). Puede ser beneficioso cuando un conjunto de datos está desequilibrado y el resultado que buscamos pertenece a una clase más pequeña.

donde aplicar

1. Detección de fraude. Queremos reducir las muestras de falsos negativos (por ejemplo, un modelo trata una transacción como habitual cuando es dudosa). Un objetivo es minimizar el riesgo de que las transacciones fraudulentas pasen desapercibidas (incluso si la tasa de falsos positivos aumentara).

2. Identificación de enfermedades. Tiene la misma lógica. Queremos aumentar las posibilidades de contraer la enfermedad, incluso si tenemos más casos de FP para resolver en el futuro.

3. Elige a un forastero en un partido deportivo. Supongamos un juego con dos resultados (ganancia/derrota de un favorito). Pero queremos saber si un forastero tiene una oportunidad. Un modelo balanceado realizará la “selección de cerezas” la mayor parte del tiempo porque es una manera fácil de predecir la victoria de un favorito. La salida es penalizar los falsos negativos (casos en los que un modelo predice la victoria de un equipo más fuerte, pero la etiqueta exacta es la pérdida de un favorito).

No queremos altas tasas de FP en los primeros dos casos porque aumentaría el uso de recursos para confirmar que la muestra no es un fraude/enfermedad. Por lo tanto, la optimización del modelo sigue siendo necesaria.

El puente entre logloss original y personalizado

Un algoritmo ordinario de aumento de gradiente (el algoritmo) realiza los siguientes pasos. Obtiene el valor predicho (llamémoslo “predt”, en forma de logit o logitraw según la biblioteca que usemos) y una etiqueta verdadera respectiva (llamémoslo “y”), luego estima el valor de la función logloss . Realiza estas acciones línea por línea para calcular el valor de la función de pérdida acumulada.

🔥 Recomendado:  ¿Instagram notifica cuando tomas una captura de pantalla de una historia? (2023)

El logloss tiene la siguiente fórmula:

donde N— número de muestras, y— etiqueta verdadera, log — logaritmo natural.

p_i — la probabilidad de que la i-ésima muestra sea 1 (función sigmoidea):

donde m es el número de características, zis es una regresión lineal donde los pesos de las características son los valores de las características.

El siguiente paso es actualizar los pesos de las características para minimizar la pérdida. El algoritmo calcula un gradiente y una arpillera para elegir una dirección y potencia para cambiar los pesos.

La fórmula para el gradiente:

La fórmula para la arpillera:

Calculamos derivadas aplicando la regla de la cadena a la función loglosa l con respecto a un cambio de un argumento z.

Podemos imaginar el proceso como un juego de golf. Un golfista (un algoritmo) intenta meter la bola en el hoyo (una predicción correcta que minimiza la pérdida); para ello, puede elegir la dirección y la potencia del tiro (el gradiente) y tomar varias mazas para controlar el golpe (la arpillera).

El objetivo principal del algoritmo es hacer que el logloss acumulativo sea lo mínimo posible (un golfista extraño que persigue el número de bolas embocadas en lugar de lograr el resultado con el mínimo de golpes). Si tenemos un conjunto de datos desequilibrado y las características no brindan una categorización inequívoca, tiende a predecir que una muestra pertenece al grupo más grande (una especie de selección selectiva).

Imaginemos un juego de golf con reglas cambiadas; la mayoría de los agujeros tienen un valor estándar, pero hay extras con un valor más significativo que los agujeros ordinarios. Un golfista no entiende de antemano el precio de un objetivo. Si un jugador emboca más, recibe una recompensa mayor. Si identifica incorrectamente el hoyo como estándar y se niega a acercarse, pierde tiempo y recibe menos compensación.

El algoritmo básico no puede realizar el cambio en las reglas, por lo que procede a otras más simples y no logra identificar ni puntuar extras. Introduzcamos “beta” (un número positivo sin límite superior) para cambiar las tornas. Su objetivo es aumentar drásticamente una pérdida acumulada si el algoritmo hace una predicción de selección de cerezas incorrecta. El algoritmo básico también tiene “beta”, que es igual a 1.

🔥 Recomendado:  6 formas a prueba de balas para construir una comunidad (y convertir seguidores ocasionales en fanáticos entusiastas)

El beta-logloss tiene la siguiente fórmula:

Fórmulas para el gradiente y la arpillera:

La pérdida personalizada se implementa cambiando el algoritmo “beta” a menos de 1 para penalizar FN o más de 1 para hacer que FP cueste más. Deberíamos recalcular el gradiente y la arpillera con una nueva “beta”, obligando al algoritmo a cambiar una política de cálculo de pérdidas.

Vamos a codificar pérdida personalizada

Implementé el código en la API scikit-learn para XGboost en Python (versión 1.0.2). Podemos usar funciones de pérdida personalizadas en paquetes de aumento de gradiente (XGBoost, LightGBM, Catboost) o paquetes de aprendizaje profundo como TensorFlow.

Hay cuatro funciones definidas por el usuario para hacer que funcione una función de pérdida personalizada. El primero es calcular la primera derivada de la función logloss modificada (un gradiente), el segundo es calcular la segunda derivada, el tercero es obtener la función objetivo y el cuarto es calcular la métrica de evaluación modificada.

De aquí en adelante, yparameter contiene un valor de clase real, predtgets el valor predicho para evaluar.

La función logreg_err_beta_sklearn calcula el logloss en función del conjunto de datos para la valoración. Comprueba el rendimiento contra datos no vistos. Incluso si aplicamos la API sklearn, esta función definida por el usuario recibe el argumento dmat, que es el tipo de datos DMatrix (estructura de datos interna de XGBoost).

Ejemplo basado en un conjunto de datos del Titanic

El conjunto de datos titánico es un caso de un conjunto de datos desequilibrado donde la tasa de supervivencia es apenas del 38%.

Omitamos los pasos de preprocesamiento realizados antes del modelado y pasemos directamente a la tarea de clasificación. Puede encontrar un todo en mi repositorio de GitHub al que se hace referencia al final del artículo.

El resultado del algoritmo básico es la siguiente matriz de confusión:

El algoritmo básico da 38 casos FN. Supongamos que nuestro objetivo es reducir el número de FN. Cambiemos una función objetivo a la personalizada, modifiquemos las métricas de evaluación en consecuencia y establezcamos “beta” en .4.

Los cambios del algoritmo básico son la desactivación de la métrica de evaluación predeterminada, la introducción explícita de la función personalizada de logloss y la métrica de evaluación respectiva.

La matriz de confusión para el algoritmo beta-logloss:

El algoritmo beta reduce los casos de FN a 25 (-34 %), los verdaderos positivos (TP) aumentaron a 112 (+13 %), los FP aumentaron a 53 (+103 %), los verdaderos negativos (TN) disminuyeron a 167 (-14 % ). La caída en FN conduce a un aumento tanto en TP como en FP. La precisión general cayó.

🔥 Recomendado:  Snap equipa a los minoristas con tecnología AR e AI para experiencias de compra mejoradas

Podemos aplicar fácilmente la misma lógica para penalizar FP eligiendo “beta” superior a 1.

Conclusiones

El beta-logloss tiene algunas ventajas y desventajas distintivas. He enumerado los más obvios.

Ventajas

  • Fácil y rápido de aplicar (use cuatro funciones definidas por el usuario y beta, y eso es todo).
  • No es necesario manipular los datos subyacentes antes del modelado (si un conjunto de datos no está muy desequilibrado)
  • Puede aplicarse como parte de la exploración de datos o como parte del apilamiento de modelos.
  • Podemos agregarlo a los paquetes de aprendizaje automático más populares.

Atajos

  • Deberíamos ajustar “beta” para obtener una compensación óptima de FN a FP.
  • Es posible que no brinde resultados significativos cuando un conjunto de datos está muy desequilibrado (el conjunto de datos donde la clase menor es menos del 10 % de todas las muestras). El análisis exploratorio de datos es vital para que el modelo funcione.
  • En caso de que penalicemos FN, a menudo conduce a un gran crecimiento de FP y viceversa. Es posible que necesite recursos adicionales para compensar ese crecimiento.

Referencias

  1. Descripción general de la entropía cruzada binaria (logloss): https://towardsdatascience.com/understanding-binary-cross-entropy-log-loss-a-visual-explanation-a3ac6025181
  2. Descripción general de la función de pérdida personalizada para tareas de regresión: https://towardsdatascience.com/custom-loss-functions-for-gradient-boosting-f79c1b40466d
  3. Documentación de XGBoost relacionada con la función de pérdida personalizada: https://xgboost.readthedocs.io/en/latest/tutorials/custom_metric_obj.html
  4. Fuente de la función Plot_confusion_matrix: https://www.kaggle.com/grfiv4/plot-a-confusion-matrix
  5. Enlace a mi repositorio de GitHub: https://github.com/kpluzhnikov/binary_classification_custom_loss


Delinear una clase más pequeña con la función de pérdida personalizada se publicó originalmente en Hacia la IA en Medium, donde las personas continúan la conversación resaltando y respondiendo a esta historia.

Publicado a través de Hacia la IA

Tabla de Contenido