¿Cómo se fusionan las clasificaciones en un clasificador de conjunto?

8

¿Cómo combina un clasificador de conjunto las predicciones de sus clasificadores constituyentes? Tengo dificultades para encontrar una descripción clara. En algunos ejemplos de código que he encontrado, el conjunto solo promedia las predicciones, pero no veo cómo esto podría hacer una "mejor" precisión general.

Considere el siguiente caso. Un clasificador de conjunto está compuesto por 10 clasificadores. Un clasificador tiene una precisión del 100% del tiempo en el subconjunto de datos X y del 0% en todas las demás ocasiones. Todos los demás clasificadores tienen una precisión del 0% en el subconjunto de datos X y del 100% en todas las demás ocasiones.

Usando una fórmula de promedio, donde se ignora la precisión del clasificador, el clasificador de conjunto tendría, en el mejor de los casos, un 50% de precisión. ¿Es correcto o me falta algo? ¿Cómo puede tomar una predicción promedio de N clasificadores potencialmente desorientados crear una mejor predicción que un clasificador único que sea experto en un dominio específico?

Cerin
fuente

Respuestas:

5

Leí un claro ejemplo de Introducción a la minería de datos por Tan et al.

El ejemplo afirma que si combina sus clasificadores con un sistema de votación, es decir, clasifica un registro con la clase más votada, obtendrá un mejor rendimiento. Sin embargo, este ejemplo usa directamente la etiqueta de salida de los clasificadores, y no las predicciones (creo que quiso decir probabilidades).

Tengamos 25 clasificadores independientes que tengan un error de generalización e=1accuracy=0.35. Para clasificar erróneamente un registro, al menos la mitad de ellos tiene que clasificarlo erróneamente.

Todo se puede modelar con variables aleatorias, pero solo tiene que calcular la probabilidad de que al menos 13 de ellas clasifiquen erróneamente el registro donde cada término de la suma significa que clasificador obtiene la clase de registro correctamente y equivoco.

i=1325(25i)ei(1e)(25i)=0.06
i25i

Usando predicciones directas y usando como método de combinación un promedio, creo que podría ser un poco más difícil mostrar la mejora en el desempeño del conjunto. Sin embargo, al centrarse solo en las predicciones y sin importar la etiqueta de salida del conjunto, el promedio de más predicciones puede verse como un estimador de la probabilidad real. Por lo tanto, agregar clasificadores debería mejorar las predicciones de la técnica de conjunto.

Simone
fuente
1
Esta es una excelente manera de entender por qué funciona el conjunto. Sin embargo, es probable que el caso específico sea demasiado optimista en términos de rendimiento mejorado. Esto es básico, cada clasificador se entrena (generalmente) en los mismos datos, lo que hace que la independencia de los clasificadores sea cuestionable.
probabilidad es
Por supuesto, la independencia es una hipótesis demasiado fuerte.
Simone
5

Te estás perdiendo el hecho de que el clasificador "malo" no tiene una precisión del 0%, sino que no es significativamente mejor que una suposición aleatoria.

De esta manera, las buenas predicciones son siempre las mismas y se acumulan (ya que la verdad es solo una), mientras que las malas predicciones son ruidos aleatorios que promedian.


fuente
No es que ningún clasificador sea en general "malo" o "bueno". Estoy hablando de la precisión de cada clasificador en dominios específicos. Si un clasificador es perfecto en un dominio específico, incluirlo en un conjunto puede oscurecer su utilidad, porque todos los demás clasificadores pueden hacer malas clasificaciones.
Cerin
1
A menos que tenga contradicciones perfectas (que están casi ausentes en los datos reales y utilizables), los dominios no cambian nada, ya que el clasificador también debe producir ruido en lugar de una clase exclusivamente mala para los objetos fuera de su dominio. De esta manera, solo los clasificadores parciales diferentes serán " bueno "en cada uno de los dominios. De todos modos, es obvio que una señal nítida y perfecta será silenciada por el ruido (con suerte no del todo), pero esta es la compensación por no tener información sobre qué clasificadores parciales funcionan para qué objetos.
Mi punto es que si toma un gran clasificador y promedia su predicción con malos clasificadores, es poco probable que obtenga una mejor predicción. Estás diluyendo tu buena predicción.
Cerin
@chriss: generalmente, cuando promedia, pondera cada clasificador de acuerdo con su rendimiento. En este esquema, un gran clasificador solo se diluye con otros grandes clasificadores. Los clasificadores de basura tienen bajo peso (generalmente exponencialmente bajo) y, por lo tanto, no se diluyen.
probabilidad es
@ChisS Tiene toda la razón: el punto del conjunto es que no puede elegir el mejor clasificador para cada objeto, por lo que promedia una solución razonable para una cierta atenuación de la señal por ruido y el riesgo de una catástrofe de clasificadores de bases correlacionadas.
0

En el caso de la clasificación, generalmente hay dos formas de ensamblar la predicción. Digamos que es un problema de clasificación de clase binaria y tiene 3 modelos para ensamblar llamados m1, m2 y m3 y el conjunto de datos de entrenamiento se llama tren y el conjunto de datos de prueba llamado prueba. Los modelos ya están construidos en el tren. Entonces, un código de Python será el siguiente.

El primer método es tomar una ronda del promedio

pred=round([m1.predict(test)+m2.predict(test)+m3.predict(test)]/3) 

Entonces la salida será un vector de valor 0 y 1

El segundo método consiste en agrupar la probabilidad de predicción de cada clase a partir de estos modelos y ensamblar eso y luego decidir la clase sobre la base de un umbral duro o alguna lógica.

pred_proba=[m1.predict(test).predict_proba++ m2.predict(test).predict_proba 
+m3.predict(test).predict_proba]/3 
# Simple average ensemble,however you can try weighted average as well

recorra todo el vector pred_proba para encontrar cuál de 0 y cuál 1 es 1 basándose en el umbral duro 0.5

pred=[] # Initialize a blank list for prediction

for x in pred_proba:
 if x>0.5:
   pred.append[1]
 else:
   pred.append[0]

Entonces pred es la predicción final del conjunto.

0xF
fuente