Desafío de aprendizaje automático:programa de diagnóstico en java/groovy (minería de datos, aprendizaje automático)

StackOverflow https://stackoverflow.com/questions/1836853

Pregunta

Estoy planeando desarrollar un programa en Java que proporcione diagnóstico.El conjunto de datos se divide en dos partes, una para entrenamiento y otra para prueba.Mi programa debería aprender a clasificar a partir de los datos de entrenamiento (por cierto, que contienen respuestas para 30 preguntas cada una en una nueva columna, cada registro en una nueva línea, la última columna será el diagnóstico 0 o 1, en la parte de prueba de la columna de diagnóstico de datos estará vacía). el conjunto de datos contiene alrededor de 1000 registros) y luego hace predicciones al probar parte de los datos:/

Nunca he hecho nada similar, así que agradeceré cualquier consejo o información sobre la solución a un problema similar.

Estaba pensando en Aprendizaje automático Java Biblioteca o Paquete de minería de datos Java pero no estoy seguro si es la dirección correcta...?y todavía no estoy seguro de cómo afrontar este desafío...

Por favor avise.

¡Mis mejores deseos!

¿Fue útil?

Solución

Hola Como dijo Gann Bierner, este es un problema de clasificación. El mejor algoritmo de clasificación para sus necesidades que conozco es, el algoritmo de Ross Quinlan. Es conceptualmente muy fácil de entender.

Para implementaciones off-the-shelf de los algoritmos de clasificación, la mejor apuesta es Weka. http://www.cs.waikato.ac.nz/ml/weka/. He estudiado Weka pero no se utiliza, ya que descubrimos que un poco demasiado tarde.

He utilizado una aplicación mucho más simple llamada JadTi. Funciona bastante bien para los conjuntos de datos más pequeños como el suyo. Lo he usado un poco, por lo que puedo decir con confianza por lo. JadTi se puede encontrar en:

http: //www.run.montefiore.ulg. ac.be/~francois/software/jaDTi/

Una vez dicho todo esto, su reto será la construcción de una interfaz utilizable sobre tela. Para ello, el conjunto de datos será de uso limitado. El conjunto de datos funciona básicamente en la premisa de que tiene el conjunto de entrenamiento ya, y que alimentan el nuevo conjunto de datos de prueba en un solo paso, y se obtiene la respuesta (s) de inmediato.

Pero mi solicitud, probablemente, también la suya, era un paso por el descubrimiento de usuario paso, con las características para ir y venir en los nodos del árbol de decisión.

Para construir una aplicación de este tipo, he creado un documento PMML de mi conjunto de entrenamiento, y construyó un motor de Java que atraviesa cada nodo del árbol que pide al usuario para dar una entrada (texto / radio / lista) y utilizar los valores como entradas a la próxima posible predicado nodo.

El estándar PMML se puede encontrar aquí: http://www.dmg.org/ Aquí es necesario TreeModel solamente. NetBeans Plugin XML es un buen editor de esquemas conscientes de PMML autoría. Altova XML puede hacer un mejor trabajo, pero los costos de $$.

También es posible utilizar un RDBMS para almacenar el conjunto de datos y crear el PMML automágicamente! No he probado eso.

Buena suerte con su proyecto, no dude en hacérmelo saber si necesita más entradas.

Otros consejos

Yo recomiendo encarecidamente utilizar Weka para su tarea
Es una colección de algoritmos de aprendizaje automático con un amistoso front-end de usuario que facilita una gran cantidad de diferentes tipos de estrategias de selección de modelos de características y
Puede hacer muchas cosas muy complicadas de usar este sin realmente tener que hacer ningún tipo de codificación o matemáticas
Los fabricantes también han publicado un bastante bueno libro de texto que explica los aspectos prácticos de la minería de datos
Una vez que el cuelgue de ella, podría utilizar su API para integrar cualquiera de sus clasificadores en sus propios programas de Java

Existen varios algoritmos que caen en la categoría de "aprendizaje automático", y que es adecuado para su situación depende del tipo de datos que se está tratando.

Si los datos se compone esencialmente de asignaciones de una serie de preguntas a un conjunto de diagnósticos cada uno de los cuales puede ser sí / no, entonces creo que los métodos que potencialmente podrían trabajar incluyen redes y métodos neuronales para construir automáticamente un árbol de decisiones sobre la base de los datos de prueba.

Tendría un vistazo a algunos de los textos estándar tales como Russel y Norvig ( "Inteligencia Artificial: Un Enfoque moderno") y otros tipos de introducción a la IA de aprendizaje / máquina y ver si se puede adaptar fácilmente a los algoritmos que mencionan a sus datos particulares. Ver también O'Reilly, "Programación de la inteligencia colectiva" para algunos ejemplos de código Python de uno o dos algoritmos que pueden ser adaptables a su caso.

Si usted puede leer español, la editorial Alfaomega mexicana han publicado también diversos buenas introducciones relacionadas con la IA en los últimos años.

Este es un problema de clasificación, no es realmente la minería de datos. El enfoque general consiste en extraer características de cada instancia de datos y dejar que el algoritmo de clasificación aprender un modelo a partir de las características y el resultado (que para usted es 0 ó 1). Es de suponer que cada una de las 30 preguntas sería su propia función.

Hay muchas técnicas de clasificación que puede utilizar. máquinas de vectores de soporte es muy popular como es la entropía máxima. No he utilizado la biblioteca de Java Machine Learning, pero a simple vista no veo ninguno de estos. El proyecto tiene una aplicación OpenNLP máxima entropía. LibSVM tiene una implementación de máquinas de vectores soporte. Es casi seguro que tiene que modificar sus datos a algo que la biblioteca pueda entender.

Buena suerte!

Actualización: Estoy de acuerdo con otro comentarista en que Russel y Norvig es un gran libro AI que discute algo de esto. "Reconocimiento de patrones y aprendizaje automático" del obispo discute cuestiones de clasificación en profundidad si está interesado en el abajo y detalles sucios.

Su tarea es clásica para las redes neuronales, que en primer lugar están destinadas a resolver exactamente tareas de clasificación.La red neuronal tiene una realización bastante simple en cualquier idioma y es la "corriente principal" del "aprendizaje automático", más cercana a la IA que cualquier otra cosa.Simplemente implemente (u obtenga una implementación existente) una red neuronal estándar, por ejemplo, una red multicapa con aprendizaje por retropropagación de errores, y le dé ejemplos de aprendizaje en ciclo.Después de un tiempo de aprendizaje, lo conseguirá trabajar en ejemplos reales.Puede leer más sobre redes neuronales a partir de aquí:http://en.wikipedia.org/wiki/Neural_network http://en.wikipedia.org/wiki/Artificial_neural_networkTambién puede obtener enlaces a muchas implementaciones listas aquí:http://en.wikipedia.org/wiki/Neural_network_software

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