6 votos

Cómo obtener confianza en las predicciones de clasificación con Vowpal Wabbit multiclase

Tengo un problema de clasificación en el que estoy utilizando el --ect para el algoritmo multiclase.

El resultado del clasificador es algo así:

1.000000 805848386108096
2.000000 133087140195133
2.000000 598100953597523
3.000000 629273927146079
2.000000 547637911979064
1.000000 733923413306849

Donde la primera parte es la clase (1 a 3) y la segunda parte mi etiqueta/id.

¿Hay alguna forma de obtener el nivel de "confianza" de cada predicción? Por ejemplo, si la confianza está por debajo de un determinado umbral, quiero dejar el ejemplo como "no clasificado".

0 votos

¿Esta pregunta ayuda en algo? stats.stackexchange.com/questions/88502/ ? Concretamente el -oaa bandera mencionada en la respuesta.

0 votos

Gracias por remitir ese post, pero eso describe cómo hacer una predicción multiclase. No resuelve la cuestión de la "confianza" / "precisión". Me gustaría obtener la confianza para cada predicción de la clasificación multiclase.

0 votos

La clasificación es lo mismo que la predicción sobre datos "antiguos".

10voto

Ying Xiao Puntos 1019

Desgraciadamente, debido a la implementación del árbol de filtros/eliminación en ECT, obtener una medida de confianza no es sencillo. Si puede sacrificar algo de velocidad, utilizando -oaa con pérdida logística y la opción -r (--raw_predictions) obtendrá puntuaciones brutas que podrá convertir en una medida normalizada de "confianza" relativa. Digamos que tiene un archivo como este en "ect.dat":

1 ex1| a
2 ex2| a b
3 ex3| c d e
2 ex4| b a
1 ex5| f g

Corremos el uno contra todos:

vw --oaa 3 ect.dat -f oaa.model --loss_function logistic

A continuación, ejecute la predicción con la salida de las puntuaciones brutas:

vw -t -i oaa.model ect.dat -p oaa.predict -r oaa.rawp

Se obtienen predicciones en oaa.predict:

1.000000 ex1
2.000000 ex2
3.000000 ex3
2.000000 ex4
1.000000 ex5

y las puntuaciones brutas de cada clase en oaa.rawp:

1:0.0345831 2:-0.0888872 3:-0.533179 ex1
1:-0.241225 2:0.170322 3:-0.749773 ex2
1:-0.426383 2:-0.502638 3:0.154067 ex3
1:-0.241225 2:0.170322 3:-0.749773 ex4
1:0.307398 2:-0.387151 3:-0.502747 ex5

Puede asignarlas utilizando 1/(1+exp(-score)) y luego normalizar de varias maneras para obtener algo como esto:

1:0.62144216 2:0.5328338 3:0.20096953 ex1
1:0.57251362 2:0.71125717 3:0.1433303 ex2
1:0.37941591 2:0.29294807 3:0.66095287 ex3
1:0.57251362 2:0.71125717 3:0.1433303 ex4
1:0.72177734 2:0.37525053 3:0.2704246 ex5

Una vez que tenga un conjunto de datos significativamente grande puntuado, puede graficar el umbral en pasos de 0,1, por ejemplo, contra el porcentaje correcto si usa ese umbral para puntuar, para tener una idea de qué umbral le dará, digamos, un 95% correcto para la clase 1, y así sucesivamente.

Este debate puede ser útil.

0 votos

Suelo hacer algo similar con otros métodos de clasificación, pero los utilizo como pesos frente a la puntuación f1 de cada clase calculada en alguna muestra de prueba grande no vista. Puedo seguir actualizando la muestra de prueba y la puntuación f1 a medida que llegan nuevos datos y hacer un seguimiento de la deriva, reconstruyendo los modelos cuando los umbrales o la precisión caen.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X