5

Soy nuevo en Redes neuronales artificiales.Separación y técnicas de coincidencia de patrones

estoy interesado en una aplicación como ésta:

table

Tengo una muy considerable conjunto de objetos. Cada objeto tiene seis propiedades, denotadas por P1 – P6. Cada propiedad tiene un valor que es un valor simbólico. En otras palabras, en mi ejemplo P1 – P6 puede tener un valor del conjunto {A, B, C, D, E, F}. No son numéricos. (Supongamos que A, B, C, D, E, F son los colores;. Entonces entenderás mi idea)

Ahora, hay otra propiedad R que estoy interesado en Supongamos

R =. {G1, G2, G3, G4, G5}

necesito para entrenar a un sistema para un gran conjunto de P1 – P6 y el correspondiente R. Ahora quiero hacer lo siguiente.

  1. que tienen un objeto y sé que los valores de P1 a P6. Necesito encontrar R (El grupo al que pertenece el objeto)

  2. Para obtener un R deseado, ¿cuál es el patrón que necesito tener en P1 – P6. Como ejemplo, dado que R = G2, necesito encontrar cualquier patrón en P1 – P6.

Mis preguntas son:

  1. ¿Cuáles son las teorías/tecnologías/técnicas que deben leer y aprender a fin de poner en práctica 1 y 2, respectivamente?

  2. ¿Cuáles son las herramientas/bibliotecas que puede recomendar para obtener este simulado/implementado/probado?

+0

¿Qué tan grande es el conjunto {A, B, C, D, E, F, ...}? ¿es finito? – wildplasser

+0

Sí lo es. Y son independientes –

+0

Bueno, entonces en mi humilde opinión su problema parece más o menos como un motor de búsqueda o sistema de recomendación (a excepción de que el Px tiene un tamaño fijo) ¿Ha mirado SVD? – wildplasser

Respuesta

3

Debe consultar classification algorithms (una subsección de inteligencia artificial), especialmente los algoritmos vecinos más cercanos. Su problema puede ser resuelto por diferentes técnicas, que tienen diferentes ventajas y desventajas.

Sin embargo, no conozco ningún método en inteligencia artificial, que permita una clasificación bidireccional (o en otras palabras, que ambos implementen sus requisitos previos 1 y 2 simultáneamente). Como todo lo que quiere hacer hasta ahora es tener un mapeo bidireccional de P1..P6 < => R, yo sugeriría que simplemente use una tabla de mapeo en lugar de un algoritmo de inteligencia artificial. Una IA funcionaría muy bien si no sabes exactamente, cuál de tus muestras está categorizada bajo A..E en P1..P6.

Si insistes en usar una IA para ello, te sugiero que primero veas un Perceptron. Un perceptron consiste en neuronas de entrada, intermedias y de salida. Para su ejemplo, tendría la entrada-Neuronas P1a..P1e, P2a..P2e, ... y cinco neuronas de salida R1..R5. Después del entrenamiento, debe poder ingresar P1..P6 y obtener el R1 .. R5 apropiado como salida.

En cuanto a los frameworks y las tecnologías, solo conozco el paquete Business Intelligence para Visual Studio, aunque hay muchos otros frameworks para AI. Como no he usado ninguno de ellos (siempre los codifiqué yo mismo en C/C++), no puedo recomendar ninguno.

5

La forma que ha descrito su problema, tiene que mirar hacia arriba diversas técnicas de aprendizaje automático. Si fuera yo, trataría de leer acerca de k-NN (k Vecinos más cercanos) para la clasificación. Cuando digo clasificación, me refiero a obtener la R si sabes P1-P6. Es una técnica realmente simple y debería ser útil aquí.

En cuanto a la inversa, lo que básicamente necesita es una muestra representativa de su población. Esto es, creo que no es tan habitual, pero podrías probar algo como un k-means Clustering. Los métodos de agrupación generalmente determinan la clase de un objeto (propiedad R) por sí mismos, pero k-means. El agrupamiento es genial en esta situación porque necesita darle el número de clases de objetos (por ejemplo, diferentes valores posibles de R), y al final obtienes una muestra representativa.

Definitivamente no debería recurrir a técnicas realmente complejas (como las redes neuronales) en mi opinión, ya que sus datos no tienen una interpretación numérica precisa y los valores no pueden interpretarse de forma gradual.

Las herramientas recomendadas realmente dependen de su lenguaje de programación base. Hay una gran herramienta llamada Orange que está basada en Python y es mi herramienta de elección para este tipo de cosas (especialmente porque es muy fácil conectar los módulos de Python con C/C++). Si prefiere Java, hay una herramienta bastante similar llamada Weka que puede usar. Creo que Weka está un poco mejor documentado, pero no me gusta Java, así que nunca lo he probado.

Ambas herramientas tienen una interfaz gráfica en la que se puede hacer clic donde puede cargar sus datos y obtener la clasificación, jugar con los parámetros y verificar qué tipo de salida obtiene utilizando diferentes técnicas y diferentes configuraciones. Una vez que decidas que obtuviste los resultados que necesitas (o si simplemente no te gustan las interfaces gráficas) también puedes usarlos como bibliotecas de un tipo al programar (Python para Orange y Java para Weka) y hacer que la clasificación sea una parte de un proyecto más grande.

Si mira a través de la documentación de Orange o Weka, creo que le dará algunas ideas acerca de lo que realmente podría hacer con los datos que posee y cuando conoce algunas técnicas que le parecen interesantes y aplicables a los datos, tal vez podría obtener más comentarios de calidad e información sobre algunos métodos específicos aquí que cuando busca un consejo general.

1

Parece un problema típico de clasificación. En caso de que realmente tenga muchos datos, eche un vistazo a Apache Mahout que proporciona implementaciones distribuidas de algoritmos de aprendizaje automático. Si necesita algo menos complejo para el prototipado, TimBL es una buena alternativa.

Cuestiones relacionadas