19

Planeo desarrollar un programa en Java que proporcione un diagnóstico. El conjunto de datos se divide en dos partes, una para el entrenamiento y la otra para la prueba. Mi programa debe aprender a clasificar a partir de los datos de entrenamiento (por cierto, que contienen respuesta para 30 preguntas cada uno en la nueva columna, cada registro en la nueva línea de la última columna será de diagnóstico 0 o 1, en la parte de pruebas de la columna de datos diagnosis estará vacía - el conjunto de datos contiene alrededor de 1000 registros) y luego hacer predicciones al probar parte de los datos:/Desafío de aprendizaje automático: programa de diagnóstico en java/groovy (datamining, machine learning)

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

Estaba pensando en Java Machine Learning Biblioteca o Java Data Mining Package pero no estoy seguro si es la dirección correcta ...? y todavía no estoy seguro de cómo abordar este desafío ...

Por favor, asesorar.

¡Todo lo mejor!

+5

1: Para contrarrestar la downvote: esto parece una pregunta interesante. –

+0

@ Jim Ferrans - ¡Gracias Jim! –

+0

Diagonoising ¿qué? Si está intentando diagnosticar problemas en un programa, se encontrará con el problema de detención. – monksy

Respuesta

7

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/. Estudié Weka pero no lo usé, ya que lo descubrí un poco tarde.

Utilicé una implementación mucho más simple llamada JadTi. Funciona bastante bien para conjuntos de datos más pequeños como el tuyo. Lo he usado bastante, así que puedo decirlo con confianza. JadTi se puede encontrar en:

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

Habiendo dicho todo esto, su reto será la construcción de una interfaz utilizable sobre tela. Para hacerlo, el conjunto de datos será de uso limitado. El conjunto de datos básicamente funciona con la premisa de que ya tiene el conjunto de capacitación, y alimenta el nuevo conjunto de datos de prueba en un solo paso, y obtiene la respuesta inmediatamente.

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 el uso de los valores como entradas al siguiente posible predicado de nodo.

El estándar PMML se puede encontrar aquí: http://www.dmg.org/ Aquí es necesario sólo el TreeModel. NetBeans XML Plugin es un buen editor de esquemas para la creación de PMML. Altova XML puede hacer un mejor trabajo, pero cuesta $$.

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

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

+1

¿Cómo se puede afirmar inequívocamente que los árboles de decisión son los mejor algoritmo para la tarea en cuestión? –

+3

dije, "yo sé de", ¿verdad? ¿Qué sugieres? –

+1

Tienes razón, lo siento. Creo que primero trataría de ejecutarlo a través de un SVM ya que ' Sería bastante fácil de hacer rápidamente (p. ej., simplemente coloque los datos en un formato que libsvm comprenda y ejecute) y generalmente proporciona un gran rendimiento ormance relativo a la cantidad de trabajo que tiene que hacer para que funcione. Podría tratar de impulsar, ingenuos bayes, regresión logística (penalizada) (consulte "glmnet" con lectura relacionada) ... Sin embargo, sería difícil elegir una como "la mejor". –

6

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

Si sus datos consiste esencialmente en las 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 basadas en los datos de prueba.

Echaré un vistazo a algunos de los textos estándar como Russel & Norvig ("Inteligencia Artificial: Un Enfoque Moderno") y otras introducciones al AI/Machine Learning y ver si puede adaptar fácilmente los algoritmos que mencionan a sus datos particulares. Ver también O'Reilly, "Programación de la inteligencia colectiva" por algún código Python muestra de uno o dos algoritmos que podrían adaptarse a su caso.

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

+1

@ Neil Coffey - Sin conocimiento de español :(pero verifico el libro de O'Reilly. Gracias. –

6

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). Presumiblemente, cada una de sus 30 preguntas sería su propia característica.

Hay muchas técnicas de clasificación que puede utilizar. Las máquinas de vectores de soporte son populares, como lo es la entropía máxima. No he utilizado la biblioteca de Java Machine Learning, pero a simple vista no veo ninguna de estas. El proyecto OpenNLP tiene una implementación máxima de entropía. LibSVM tiene una implementación de máquina de vector de soporte. Es casi seguro que tendrá que modificar sus datos a algo que la biblioteca pueda comprender.

¡Buena suerte!

Actualización: Estoy de acuerdo con el otro comentarista que Russel y Norvig es un gran libro de AI que trata sobre 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.

+2

Gracias, tengo una copia de este libro, ¡es realmente increíble! –

13

recomiendo encarecidamente que use 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 características y de selección de modelos
Puede hacer muchas cosas muy complicadas usando esto sin tener que hacer ningún tipo de codificación o matemática
Los fabricantes también han publicado un pretty good textbook que explica los aspectos prácticos de la minería de datos
Una vez que te acostumbras, puedes usar su API para integrar cualquiera de sus clasificadores en sus propios programas Java

+0

Gracias, tendré un mira en Weka. –

+3

El software y el libro de texto son realmente buenos para entender el aprendizaje automático, los recomiendo. – gverdouw

+5

+1 para Weka. Otra buena herramienta es * RapidMiner * – Amro

3

Su tarea es clásica para redes neuronales, que están destinadas en primer lugar a resolver exactamente las 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. Usted acaba de implementar (u obtener la implementación existente) la red neuronal estándar, por ejemplo, redes de varias capas con aprendizaje por propagación inversa de error, y le da ejemplos de aprendizaje en el ciclo. Después de un tiempo de tal aprendizaje, lo pondrás a trabajar en ejemplos reales. Puede leer más sobre las redes neuronales a partir de aquí: http://en.wikipedia.org/wiki/Neural_network http://en.wikipedia.org/wiki/Artificial_neural_network También se puede conseguir enlaces a muchas implementaciones listas aquí: http://en.wikipedia.org/wiki/Neural_network_software

Cuestiones relacionadas