Pregunta

Tengo un sistema de clasificación, del cual desafortunadamente necesitaré ser vago por razones de trabajo. Digamos que tenemos 5 características a considerar, es básicamente un conjunto de reglas:

A  B  C  D  E  Result
1  2  b  5  3  X
1  2  c  5  4  X
1  2  e  5  2  X

Tomamos un tema y obtenemos sus valores para AE, luego intentamos que coincidan con las reglas en secuencia. Si uno coincide, devolvemos el primer resultado.

C es un valor discreto, que podría ser cualquiera de AE. El resto son solo enteros.

El conjunto de reglas se ha generado automáticamente a partir de nuestro sistema anterior y tiene una cantidad extremadamente grande de reglas (~ 25 millones). Las viejas reglas eran las declaraciones, por ejemplo

result("X") if $A >= 1 && $A <= 10 && $C eq 'A';

Como puede ver, las reglas antiguas a menudo ni siquiera usan algunas características, ni aceptan rangos. Algunos son más molestos:

result("Y") if ($A == 1 && $B == 2) || ($A == 2 && $B == 4);

El conjunto de reglas debe ser mucho más pequeño, ya que tiene que ser mantenido humano, por lo que me gustaría reducir los conjuntos de reglas para que el primer ejemplo sea:

A  B  C    D  E    Result
1  2  bce  5  2-4  X

El resultado es que podemos dividir el conjunto de reglas por la columna del resultado y reducir cada uno de forma independiente. Sin embargo, no puedo pensar en una manera fácil de identificar y reducir el conjunto de reglas. He intentado agrupar algoritmos pero se ahogan porque algunos de los datos son discretos, y tratarlos como continuos es imperfecto. Otro ejemplo:

A  B  C   Result
1  2  a   X
1  2  b   X
(repeat a few hundred times)
2  4  a   X  
2  4  b   X
(ditto)

En un mundo ideal, estas serían dos reglas:

A  B  C  Result
1  2  *  X
2  4  *  X

Es decir: no solo el algoritmo identificaría la relación entre A y B, sino que también deduciría que C es ruido (no importante para la regla)

¿Alguien tiene una idea de cómo tener este problema? Cualquier idioma o biblioteca es un juego justo, ya que espero que este sea un proceso en su mayoría único. Gracias por adelantado.

¿Fue útil?

Solución

Revisar la Weka Machine Learning Lib para Java. La API es un poco cruzada pero es muy útil. En general, lo que parece que desea es un algoritmo de aprendizaje automático listo para usar, que es exactamente lo que contiene Weka. Aparentemente, está buscando algo relativamente fácil de interpretar (usted menciona que desea que deduzca la relación entre A y B y que le diga que C es solo ruido). Puede probar un árbol de decisión, como J48, como estas. Suelen ser fáciles de visualizar/interpretar.

Otros consejos

¿Veinticinco millones de reglas? ¿Cuántas características? ¿Cuántos valores por función? ¿Es posible iterar a través de todas las combinaciones en tiempo práctico? Si puede, podría comenzar separando las reglas en grupos por resultado.

Luego, para cada resultado, haga lo siguiente. Teniendo en cuenta cada característica como una dimensión, y los valores permitidos para una característica como métrica a lo largo de esa dimensión, construyen un enorme mapa de Karnaugh que represente todo el conjunto de reglas.

El mapa tiene dos usos. Uno: Investigación de métodos automatizados para el algoritmo Quine-McCluskey. Se ha realizado mucho trabajo en esta área. Incluso hay algunos programas disponibles, aunque probablemente ninguno de ellos se ocupará de un mapa de Karnaugh del tamaño que hará.

Dos: cuando haya creado su conjunto final de reglas reducidas, iterar sobre todas las combinaciones de todos los valores para todas las características nuevamente, y construya otro mapa de Karnaugh utilizando el conjunto de reglas reducidas. Si los mapas coinciden, sus conjuntos de reglas son equivalentes.

-Alabama.

Podrías probar un red neuronal Enfoque, entrenado a través de backpropagation, suponiendo que tenga o puede generar aleatoriamente (según el conjunto de reglas anterior) un gran conjunto de datos que presionan todas sus clases. El uso de una capa oculta de tamaño apropiado le permitirá aproximar las funciones discriminantes arbitrarias en su espacio de características. Esta es más o menos la misma idea que la agrupación, pero debido al paradigma de capacitación no debe tener ningún problema con sus insumos discretos.

Sin embargo, esto puede ser un poco "cuadro negro" para su caso, particularmente si tiene tolerancia cero para falsos positivos y negativos (aunque, siendo un proceso único, obtiene un grado arbitrario de confianza al verificar a un gigantuo conjunto de validación).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top