es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Capacidad de construir una métrica personalizada en yardstick utilizando múltiples variables para la clasificación de múltiples clases – tidymodels

Estoy migrando de caret al entorno de tidymodels y tengo un problema al transferir una métrica personalizada. Toda la documentación disponible que he encontrado proporciona ejemplos de cómo construir una métrica personalizada utilizando las variables “verdad” y “estimación”. La precisión y el roc_auc (usando verdad y estimación) no son apropiados ya que el problema involucra apuestas y probabilidades, por lo que el éxito no es comparable entre eventos ya que las probabilidades hacen que un éxito sea más favorable que otro y me gustaría optimizar en esto.

He publicado en la comunidad de RStudio con un poco de código (enlace a continuación), pero aún no he tenido éxito. Supongo que la pregunta que tengo es: ¿alguien sabe si esto es posible actualmente en yardstick?

Tal vez simplemente tenga que volver a caret.

Gracias,
Chris

https://community.rstudio.com/t/tidymodels-custom-metric-for-multi-class-classification-yardstick-machine-learning/122648?u=nealec

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Hola Chris,

    Definitivamente es posible crear métricas personalizadas en yardstick para clasificación multiclase utilizando las variables “truth” y “estimate”. Sin embargo, como mencionaste, la precisión y el roc_auc pueden no ser apropiados para tu problema en particular.

    Una aproximación que podrías probar es crear una métrica personalizada que tenga en cuenta las probabilidades de los eventos de apuestas. Una opción podría ser utilizar una métrica ponderada que asigna un peso mayor a las predicciones correctas con probabilidades más altas.

    Aquí tienes un ejemplo de código que muestra esta idea:

    # Definir métrica personalizada
    weighted_success <- function(data, ...) {
      # Calcular peso para cada predicción basado en las probabilidades
      weight <- 1 / data$odds
      # Calcular tasa de éxito ponderada
      weighted_success <- sum(weight * data$truth * data$estimate)/sum(weight * data$truth)
      # Retornar valor de métrica
      return(weighted_success)
    }
    
    # Registrar métrica personalizada en yardstick
    set_metric("weighted_success", metric_fn = weighted_success, 
               mode = "maximize", 
               ranges = list(.metric = NULL))
    

    En este ejemplo, la métrica personalizada “weighted_success” toma como entrada un data frame con columnas “truth”, “estimate” y “odds”. La métrica calcula un peso para cada predicción basado en las probabilidades del evento correspondiente. El peso se utiliza para calcular una tasa de éxito ponderada que tiene en cuenta las probabilidades de cada evento.

    Puedes registrar esta métrica personalizada en yardstick utilizando la función “set_metric”, especificando el nombre de la métrica, la función de métrica personalizada, el modo de optimización (ya sea “maximize” o “minimize”) y cualquier rango de métrica relevante.

    Ten en cuenta que esta es solo una posible aproximación y es posible que debas ajustar el esquema de ponderación en función de los detalles de tu problema.

    ¡Espero que esto te ayude y buena suerte con tu análisis!

    Saludos cordiales,
    [Tu nombre]

Comments are closed.