19

Sto pianificando di sviluppare un programma in Java che fornisca diagnosi. Il set di dati è diviso in due parti una per l'allenamento e l'altra per il test. Il mio programma dovrebbe imparare a classificare dai dati di addestramento (BTW che contiene la risposta per 30 domande ciascuno in una nuova colonna, ogni record in una nuova riga l'ultima colonna sarà diagnosi 0 o 1, nella parte di test della colonna di diagnosi dei dati sarà vuota - set di dati contiene circa 1000 record) e quindi fare previsioni nel test di una parte dei dati:/Sfida di apprendimento automatico: diagnosi del programma in java/groovy (datamining, machine learning)

Non ho mai fatto nulla di simile quindi apprezzerò qualsiasi consiglio o informazione sulla soluzione a problemi simili.

Stavo pensando alla libreria Java Machine Learning o allo Java Data Mining Package ma non sono sicuro che sia la direzione giusta ...? e non sono ancora sicuro di come affrontare questa sfida ...

Si prega di avvisare.

Tutto il meglio!

+5

+1: per contrastare la downvote: questo sembra una domanda interessante. –

+0

@ Jim Ferrans - Grazie Jim! –

+0

Diagonoising cosa? Se stai tentando di diagnosticare problemi in un programma, ti imbatterai nel problema dell'arresto. – monksy

risposta

7

Ciao, come ha detto Gann Bierner, questo è un problema di classificazione. Il migliore algoritmo di classificazione per i tuoi bisogni che conosco è l'algoritmo di Ross Quinlan. È concettualmente molto facile da capire.

Per implementazioni standard degli algoritmi di classificazione, la soluzione migliore è Weka. http://www.cs.waikato.ac.nz/ml/weka/. Ho studiato Weka ma non l'ho usato, perché l'ho scoperto un po 'troppo tardi.

Ho utilizzato un'implementazione molto più semplice denominata JadTi. Funziona piuttosto bene per i set di dati più piccoli come il tuo. L'ho usato parecchio, quindi posso tranquillamente dirlo. JadTi sono disponibili all'indirizzo:

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

Detto tutto questo, la vostra sfida sarà la costruzione di un'interfaccia utilizzabile su web. Per fare ciò, il set di dati sarà di uso limitato. Il set di dati funziona fondamentalmente sulla premessa che si dispone già del set di allenamento e si alimenta il nuovo set di dati di test in un unico passaggio e si ottiene immediatamente la/le risposta/e.

Ma la mia applicazione, probabilmente anche la vostra, è stata una scoperta passo-passo degli utenti, con funzionalità per andare avanti e indietro sui nodi dell'albero decisionale.

Per creare un'applicazione del genere, ho creato un documento PMML dal mio set di formazione e creato un motore Java che attraversa ogni nodo dell'albero chiedendo all'utente di fornire un input (testo/radio/elenco) e utilizzare i valori come input per il prossimo possibile predicato del nodo.

Lo standard PMML può essere trovato qui: http://www.dmg.org/ Qui è necessario solo TreeModel. NetBeans XML Plugin è un buon editor compatibile con lo schema per la creazione di PMML. Altova XML può fare un lavoro migliore, ma costa $$.

È anche possibile utilizzare un RDBMS per archiviare il set di dati e creare automaticamente il PMML! Non l'ho provato

Buona fortuna per il tuo progetto, sentiti libero di farmi sapere se hai bisogno di ulteriori input.

+1

Come puoi affermare in modo inequivocabile che gli alberi decisionali sono miglior algoritmo per il compito a portata di mano? –

+3

ho detto, "lo so di", giusto? Cosa suggerisci? –

+1

Hai ragione, mi dispiace, credo che prima avrei provato a farlo funzionare attraverso un SVM visto che " d essere abbastanza facile da fare velocemente (ad esempio, basta inserire i dati in un formato che la libreria capisce ed eseguirlo) e di solito fornisce grandi risultati perf ormance relativa alla quantità di lavoro che devi fare per farlo funzionare. Potresti provare a potenziare, ingenui bayes, regressione logistica (penalizzata) (dai un'occhiata a "glmnet" w/related reading) ... Sarebbe difficile sceglierne uno come "il migliore", però. –

6

Ci sono vari algoritmi che rientrano nella categoria di "machine learning", e che è giusto per la tua situazione dipende dal tipo di dati che stai trattando.

Se i dati consistono essenzialmente di mappature di una serie di domande a una serie di diagnosi ognuna delle quali può essere sì/no, allora penso che metodi che potrebbero potenzialmente funzionare includano reti neurali e metodi per la costruzione automatica di un albero decisionale basato sui dati di test.

Vorrei dare un'occhiata ad alcuni dei testi standard come Russel & Norvig ("Intelligenza artificiale: un approccio moderno") e altre introduzioni all'IA/apprendimento automatico e vedere se è possibile adattare facilmente gli algoritmi che menzionano ai tuoi dati particolari. Vedi anche O'Reilly, "Programming Collective Intelligence" per alcuni esempi di codice Python di uno o due algoritmi che potrebbero essere adattabili al tuo caso.

Se si può leggere lo spagnolo, la casa editrice messicana Alfaomega ha anche pubblicato varie buone introduzioni relative all'IA negli ultimi anni.

+1

@ Neil Coffey - Nessuna conoscenza dello spagnolo: (ma controllerò il libro di O'Reilly, grazie –

6

Questo è un problema di classificazione, non proprio di data mining. L'approccio generale è di estrarre le caratteristiche da ogni istanza di dati e lasciare che l'algoritmo di classificazione impari un modello dalle caratteristiche e dal risultato (che per te è 0 o 1). Presumibilmente ciascuna delle tue 30 domande sarebbe una sua caratteristica.

Esistono molte tecniche di classificazione che è possibile utilizzare. Le macchine vettoriali di supporto sono popolari così come l'entropia massima. Non ho usato la libreria Java Machine Learning, ma a prima vista non vedo nessuno di questi. Il progetto OpenNLP ha un'implementazione massima di entropia. LibSVM ha un'implementazione della macchina vettoriale di supporto. Dovrai quasi certamente modificare i tuoi dati in qualcosa che la biblioteca può capire.

Buona fortuna!

Aggiornamento: Sono d'accordo con l'altro commentatore che Russel e Norvig sono un grande libro di IA che ne discute. "Pattern Recognition and Machine Learning" di Bishop discute approfonditamente i problemi di classificazione se sei interessato ai dettagli sporchi e scuri.

+2

Grazie, ho una copia di questo libro, è davvero fantastico! –

13

vi consiglio caldamente di utilizzare Weka per il vostro compito
sua una collezione di algoritmi di apprendimento automatico con un'user friendly front-end che facilita un sacco di diversi tipi di funzionalità e di selezione del modello strategie
Si può fare un sacco di roba davvero complicata usando questo senza dover fare alcun codice o matematica
I produttori hanno anche pubblicato uno pretty good textbook che spiega gli aspetti pratici del data mining
Una volta capito, è possibile utilizzare la sua API per integrare uno qualsiasi dei le sue classificazioni nei tuoi programmi java

+0

Grazie, avrò un guarda su Weka. –

+3

Il software e il libro di testo sono ottimi per imparare a imparare a macchina, li consiglio vivamente. – gverdouw

+5

+1 per Weka.Un altro buon kit di strumenti è * RapidMiner * – Amro

3

Il tuo compito è classico per le reti neurali, che sono innanzitutto destinate a risolvere esattamente compiti di classificazione. La rete neurale ha una realizzazione piuttosto semplice in qualsiasi lingua, ed è il "mainstream" del "machine learning", più vicino all'IA di qualsiasi altro. Implementate appena (o ottenete l'implementazione esistente) una rete neurale standard, ad esempio una rete a più strati con apprendimento per propagazione dell'errore, e dategli esempi di apprendimento in ciclo. Dopo un po 'di tempo di apprendimento, lo farai lavorando su esempi reali. Si può leggere di più su reti neurali a partire da qui: http://en.wikipedia.org/wiki/Neural_network http://en.wikipedia.org/wiki/Artificial_neural_network Inoltre è possibile ottenere i collegamenti a molte implementazioni pronte qui: http://en.wikipedia.org/wiki/Neural_network_software

Problemi correlati