19

Ich plane, Programm in Java zu entwickeln, die Diagnose zur Verfügung stellen wird. Der Datensatz besteht aus zwei Teilen, einer für das Training und der andere für das Testen. Mein Programm sollte lernen, aus den Trainingsdaten zu klassifizieren (BTW, die die Antwort für 30 Fragen enthalten, jeweils in neuer Spalte, jeder Datensatz in neuer Zeile die letzte Spalte wird Diagnose 0 oder 1 sein, im Testteil der Daten-Diagnose Spalte wird leer sein) Datensatz enthalten etwa 1000 Datensätze) und dann Vorhersagen in der Prüfung Teil der Daten:/Machine Learning Herausforderung: Diagnose-Programm in Java/Groovy (Datenerfassung, maschinelles Lernen)

Ich habe noch nie etwas ähnliches getan, so dass ich einen Rat oder Informationen über die Lösung für ähnliche Problem zu schätzen wissen.

Ich dachte über Java Machine Learning Bibliothek oder Java Data Mining Package, aber ich bin mir nicht sicher, ob es richtige Richtung ist ...? und ich bin immer noch nicht sicher, wie man diese Herausforderung anpackt ...

Bitte beraten.

Alles Gute!

+5

+1: die downvote Um dem entgegenzuwirken: dies scheint eine interessante Frage. –

+0

@ Jim Ferrans - Danke Jim! –

+0

Diagonalisierung was? Wenn Sie versuchen, Probleme in einem Programm zu diagnostizieren, stoßen Sie auf das Halteproblem. – monksy

Antwort

7

Hi Wie Gann Bierner sagte, ist dies ein Klassifizierungsproblem. Der beste Klassifizierungsalgorithmus für Ihre Bedürfnisse, den ich kenne, ist der Ross-Quinlan-Algorithmus. Es ist konzeptionell sehr einfach zu verstehen.

Für Standardimplementierungen der Klassifikationsalgorithmen ist Weka die beste Wahl. http://www.cs.waikato.ac.nz/ml/weka/. Ich habe Weka studiert aber nicht benutzt, da ich es etwas zu spät entdeckt habe.

Ich habe eine viel einfachere Implementierung namens JadTi verwendet. Es funktioniert ziemlich gut für kleinere Datensätze wie deins. Ich habe es ziemlich oft benutzt, also kann ich es souverän sagen. JadTi finden Sie unter:

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

Having said, dass alle Ihre Herausforderung wird eine nutzbare Schnittstelle über Web bauen. Um dies zu tun, wird der Datensatz nur begrenzt genutzt. Der Datensatz basiert grundsätzlich auf der Voraussetzung, dass Sie bereits über das Trainingssatz verfügen und Sie den neuen Testdatensatz in einem Schritt füttern, und Sie erhalten sofort die Antwort (en).

Aber meine Anwendung, wahrscheinlich auch Ihre, war eine Schritt-für-Schritt-Benutzerermittlung mit Funktionen, die auf den Entscheidungsbaumknoten hin und her gehen.

Um eine solche Anwendung zu erstellen, habe ich ein PMML-Dokument aus meinem Trainingssatz erstellt und eine Java-Engine erstellt, die jeden Knoten des Baums durchläuft und den Benutzer auffordert, eine Eingabe (Text/Radio/Liste) zu geben und die Werte zu verwenden als Eingaben für das nächste mögliche Knotenprädikat. Die PMML-Norm finden Sie hier: http://www.dmg.org/ Hier benötigen Sie nur das TreeModel. NetBeans XML Plugin ist ein guter schemafähiger Editor für das PMML-Authoring. Altova XML kann einen besseren Job machen, kostet aber $$.

Es ist auch möglich, ein RDBMS zu verwenden, um Ihr Dataset zu speichern und das PMML automatisch zu erstellen! Ich habe das nicht versucht.

Viel Glück mit Ihrem Projekt, bitte zögern Sie nicht mich wissen zu lassen, wenn Sie weitere Eingaben benötigen.

+1

Wie können Sie so eindeutig feststellen, dass Entscheidungsbäume sind Der beste Algorithmus für diese Aufgabe? –

+3

Ich sagte: "Ich weiß von", richtig? Was schlägst du vor? –

+1

Du hast Recht, sorry. Ich denke, ich würde zuerst versuchen, es einfach durch eine SVM laufen zu lassen. d einfach sein, schnell zu tun (z. B. einfach die Daten in ein Format, das libsvm versteht und durchläuft) und bietet normalerweise eine gute Leistung Verhältnis zu der Menge an Arbeit, die Sie tun müssen, um es zur Arbeit zu bringen. Sie könnten versuchen, bouncing, naiven Bayes, (bestrafte) logistische Regression (siehe "glmnet" w/im Zusammenhang mit lesen) ... Ich würde hart gedrängt werden, eins als "die beste", obwohl. –

6

Es gibt verschiedene Algorithmen, die in die Kategorie "maschinelles Lernen" fallen. Welche Methode für Ihre Situation geeignet ist, hängt von der Art der Daten ab, mit denen Sie zu tun haben.

Wenn Ihre Daten im Wesentlichen aus Zuordnungen einer Reihe von Fragen zu einer Reihe von Diagnosen bestehen, von denen jede Ja/Nein sein kann, dann denke ich, dass potenziell neuronale Netze und Methoden zum automatischen Aufbau eines Entscheidungsbaums funktionieren könnten auf den Testdaten.

Ich würde mir einige der Standardtexte wie Russel & Norvig ("Künstliche Intelligenz: Ein moderner Ansatz") und andere Einführungen in AI/maschinelles Lernen ansehen und sehen, ob Sie die von ihnen genannten Algorithmen leicht anpassen können zu Ihren speziellen Daten. Siehe auch O'Reilly, "Programming Collective Intelligence" für einen Beispiel-Python-Code mit ein oder zwei Algorithmen, die an Ihren Fall angepasst werden können.

Wenn Sie Spanisch lesen können, hat der mexikanische Verlag Alfaomega in den letzten Jahren auch verschiedene gute KI-bezogene Einführungen veröffentlicht.

+1

@ Neil Coffey - Keine Spanischkenntnisse :(aber ich werde O'Reilly Buch überprüfen. Danke. –

6

Dies ist ein Klassifizierungsproblem, nicht wirklich Data Mining. Der allgemeine Ansatz besteht darin, Merkmale aus jeder Dateninstanz zu extrahieren und den Klassifikationsalgorithmus ein Modell aus den Merkmalen und dem Ergebnis lernen zu lassen (was für Sie 0 oder 1 ist). Vermutlich wäre jede Ihrer 30 Fragen ein eigenes Feature.

Es gibt viele Klassifizierungstechniken, die Sie verwenden können. Support-Vektor-Maschinen sind beliebt, ebenso wie maximale Entropie. Ich habe die Java Machine Learning-Bibliothek nicht benutzt, aber auf einen Blick sehe ich keinen von beiden. Das OpenNLP-Projekt hat eine maximale Entropie-Implementierung. LibSVM verfügt über eine Support Vector Machine Implementierung. Sie werden mit ziemlicher Sicherheit Ihre Daten in etwas ändern müssen, das die Bibliothek verstehen kann.

Viel Glück!

Update: Ich stimme dem anderen Kommentator zu, dass Russel und Norvig ein großes AI Buch ist, das einige davon diskutiert. Bishops "Pattern Recognition and Machine Learning" (Mustererkennung und Maschinelles Lernen) behandelt Einteilungsprobleme in der Tiefe, wenn Sie an den schmutzigen Details interessiert sind.

+2

Danke, ich habe eine Kopie dieses Buches, es ist in der Tat in der Tat! –

13

ich empfehlen Sie Weka für Ihre Aufgabe
Es ist eine Sammlung von Algorithmen des maschinellen Lernens mit einer benutzerfreundlichen Front-End verwenden, die viele verschiedene Arten von Funktion und Modellselektionsstrategien
erleichtert können Sie eine Menge tun wirklich komplizierte Sachen, die dieses verwenden, ohne wirklich irgendwelche Kodierung oder Mathe zu tun müssen
Die Macher haben auch eine pretty good textbook veröffentlicht, die die praktischen Aspekte von Data Mining erklärt
Sobald Sie den Dreh raus, könnten Sie seine API verwenden, um irgendwelchen von zu integrieren seine Klassifizierer in Ihre eigenen Java-Programme

+0

Vielen Dank, ich werde eine haben Schauen Sie auf Weka. –

+3

Die Software und das Lehrbuch sind wirklich gut für Ihren Kopf rund um maschinelles Lernen, ich empfehle sie sehr. – gverdouw

+5

+1 für Weka. Ein anderes gutes Toolkit ist * RapidMiner * – Amro

3

Ihre Aufgabe ist klassisch für neuronale Netze, die vor allem exakte Klassifikationsaufgaben lösen sollen. Neuronales Netzwerk ist in jeder Sprache ziemlich einfach zu realisieren und es ist der "Mainstream" des "maschinellen Lernens", näher an der KI als alles andere. Sie implementieren einfach (oder erhalten vorhandene Implementierung) Standart neuronales Netzwerk, zum Beispiel mehrschichtiges Netzwerk mit Lernen durch Fehlerrückübertragung, und geben Sie Lernbeispiele im Zyklus. Nach einiger Zeit des Lernens werden Sie es an realen Beispielen arbeiten. Sie können mehr über neuronale Netze lesen ab hier: http://en.wikipedia.org/wiki/Neural_network http://en.wikipedia.org/wiki/Artificial_neural_network Sie können auch Links zu vielen bereit Implementierungen bekommen hier: http://en.wikipedia.org/wiki/Neural_network_software

Verwandte Themen