9

Ich möchte hier eine Anleitung für Experten, was der beste Ansatz für mich ist, um ein Problem zu lösen. Ich habe etwas maschinelles Lernen, neuronale Netze und solche Sachen untersucht. Ich habe Weka untersucht, eine Art baesische Lösung. R .. verschiedene Dinge. Ich bin mir nicht sicher, wie ich wirklich vorgehen soll. Hier ist mein Problem.Die beste Herangehensweise an das, was ich denke, ist ein Problem des maschinellen Lernens.

Ich habe oder werde eine große Sammlung von Ereignissen haben .. schließlich rund 100.000 oder so. Jedes Ereignis besteht aus mehreren (30-50) unabhängigen Variablen und einer abhängigen Variablen, die mir wichtig sind. Einige unabhängige Variablen sind wichtiger als andere, um den Wert der abhängigen Variablen zu bestimmen. Und diese Ereignisse sind zeitlich relevant. Dinge, die heute auftreten, sind wichtiger als Ereignisse, die vor 10 Jahren stattfanden.

Ich möchte in der Lage sein, eine Art Lernmodul ein Ereignis zu füttern, und es die abhängige Variable vorhersagen lassen. Dann möchte ich die tatsächliche Antwort für die abhängige Variable für dieses Ereignis (und alle Ereignisse, die zuvor gekommen sind) kennenlernen, um darauf aufbauende Vermutungen zu trainieren.

Sobald ich eine Vorstellung davon habe, welche Programmierrichtung zu gehen, kann ich die Forschung tun und herausfinden, wie ich meine Idee in Code umwandeln kann. Aber mein Hintergrund ist paralleles Programmieren und nicht so etwas, also würde ich gerne einige Vorschläge und Anleitungen dazu haben.

Danke!

Edit: Hier ist ein bisschen mehr Details über das Problem, das ich versuche zu lösen: Es ist ein Preisbildungsproblem. Nehmen wir an, ich möchte die Preise für ein zufälliges Comic vorhersagen. Der Preis ist das einzige, was mir wichtig ist. Aber es gibt viele unabhängige Variablen, die man sich vorstellen kann. Ist es ein Superman Comic oder ein Hello Kitty Comic? Wie alt ist es? Wie ist die Bedingung? usw. Nach einiger Zeit des Trainings möchte ich in der Lage sein, Informationen über ein Comicbuch zu geben, das ich in Erwägung ziehen könnte, und es mir einen vernünftigen Erwartungswert für das Comic geben zu lassen. OK. Comic-Bücher könnten also ein falsches Beispiel sein. Aber Sie bekommen die allgemeine Idee. Bis jetzt, von den Antworten, mache ich etwas Forschung auf Unterstützungsvektormaschinen und Naive Bayes. Vielen Dank für Ihre Hilfe.

+1

Ich denke, die Tag "Klassifizierung" und "Regression" schließen sich gegenseitig aus. Es ist entweder "Klassifizierung" oder "Regression". Es kann nicht beides sein. –

Antwort

1

Wenn Sie einige klassifizierte Daten haben - eine Reihe von Beispielproblemen gepaart mit ihren richtigen Antworten -, beginnen Sie mit dem Trainieren einiger einfacher Algorithmen wie K-Nearest-Neighbor und Perceptron und sehen, ob etwas Sinnvolles daraus entsteht. Versuchen Sie nicht, es optimal zu lösen, bis Sie wissen, ob Sie es einfach oder überhaupt lösen können.

Wenn Sie keine oder nur wenig klassifizierte Daten haben, beginnen Sie mit unbeaufsichtigten Lernalgorithmen.

8

Klingt wie du bist ein Kandidat für Support Vector Machines.

Go erhalten libsvm. Lesen Sie "Eine praktische Anleitung zur SVM-Klassifizierung", die sie verteilen und kurz ist.

Im Grunde, Sie gehen Ihre Veranstaltungen zu nehmen, und formatieren Sie sie wie:

dv1 1:iv1_1 2:iv1_2 3:iv1_3 4:iv1_4 ... 
dv2 1:iv2_1 2:iv2_2 3:iv2_3 4:iv2_4 ... 

laufen sie durch ihre SVM-Skala Dienstprogramm, und dann ihre grid.py Skript für entsprechende Kernel-Parameter suchen . Der Lernalgorithmus sollte in der Lage sein, eine unterschiedliche Wichtigkeit von Variablen herauszufinden, obwohl Sie auch in der Lage sein könnten, Dinge zu gewichten. Wenn Sie denken, dass die Zeit nützlich sein wird, fügen Sie einfach die Zeit als eine weitere unabhängige Variable (Feature) für den zu verwendenden Trainingsalgorithmus hinzu.

Wenn libsvm die gewünschte Genauigkeit nicht erreichen kann, erwägen Sie, auf SVMlight zu gehen. Nur noch ein bisschen schwieriger zu handhaben und viel mehr Optionen.

Bishop's Pattern Recognition and Machine Learning ist wahrscheinlich das erste Lehrbuch, das nach Details darüber sucht, was libsvm und SVMlight tatsächlich mit Ihren Daten machen.

+0

Großartige Idee, LIBSVM ist genial. –

1

Es klingt wie jede Art von Klassifikator sollte für dieses Problem funktionieren: Finden Sie die beste Klasse (Ihre abhängige Variable) für eine Instanz (Ihre Ereignisse). Ein einfacher Ausgangspunkt könnte Naive Bayes Klassifizierung sein.

1

Dies ist definitiv ein maschinelles Lernproblem. Weka ist eine ausgezeichnete Wahl, wenn Sie Java kennen und eine gute GPL-Bibliothek haben möchten, wo Sie nur den Klassifikator auswählen und etwas Kleber schreiben müssen. R wird es wahrscheinlich nicht für so viele Instanzen (Ereignisse, wie Sie es nennen) schneiden, weil es ziemlich langsam ist. Darüber hinaus müssen Sie in R noch maschinelles Lernen finden oder schreiben, obwohl dies leicht sein sollte, da es eine statistische Sprache ist.

Wenn Sie glauben, dass Ihre Funktionen (unabhängige Variablen) bedingt unabhängig sind (unabhängig von der abhängigen Variablen), ist naives Bayes der perfekte Klassifikator, da es schnell, interpretierbar, genau und einfach zu implementieren ist. Mit 100.000 Instanzen und nur 30-50 Features können Sie jedoch wahrscheinlich ein ziemlich komplexes Klassifizierungsschema implementieren, das einen Großteil der Abhängigkeitsstruktur in Ihren Daten erfasst. Ihre beste Wette wäre wahrscheinlich eine Support-Vektor-Maschine (SMO in Weka) oder eine zufällige Wald (Ja, es ist ein dummer Name, aber es half zufälligen Wald zu fangen.) Wenn Sie den Vorteil der leichten Interpretierbarkeit Ihrer Klassifikator auch bei der Kosten einer gewissen Genauigkeit, vielleicht würde ein direkter J48-Entscheidungsbaum funktionieren. Ich würde gegen neuronale Netze empfehlen, da sie sehr langsam sind und in der Praxis normalerweise nicht besser funktionieren als SVMs und zufällige Gesamtstrukturen.

1

Das Buch Programming Collective Intelligence hat ein bearbeitetes Beispiel mit Quellcode eines Preisvorhersagers für Laptops, der wahrscheinlich ein guter Ausgangspunkt für Sie wäre.

1

SVMs sind oft der beste verfügbare Klassifikator. Es hängt alles von Ihrem Problem und Ihren Daten ab. Für einige Probleme könnten andere Algorithmen zum maschinellen Lernen besser sein. Ich habe Probleme gesehen, die neuronale Netze (speziell wiederkehrende neuronale Netze) besser lösen konnten. Es gibt keine richtige Antwort auf diese Frage, da sie sehr situationsabhängig ist, aber ich stimme mit Dsimcha und Jay überein, dass SVMs der richtige Ort sind, um damit anzufangen.

1

Ich glaube, Ihr Problem ist ein regression Problem, kein Einstufungsproblem. Der Hauptunterschied: Bei der Klassifikation versuchen wir den Wert einer diskreten Variablen zu lernen, während wir bei der Regression versuchen, den Wert einer kontinuierlichen Variable zu lernen. Die Techniken können ähnlich sein, aber die Details sind unterschiedlich. Linear Regression ist, was die meisten Leute zuerst versuchen. Es gibt viele andere Regressionstechniken, wenn die lineare Regression nicht ausreicht.

1

Sie erwähnten, dass Sie 30-50 unabhängige Variablen haben, und einige sind wichtiger als der Rest. Unter der Annahme, dass Sie historische Daten haben (oder was wir Trainingseinheiten genannt haben), können Sie PCA (Principal Componenta Analysis) oder andere Methoden zur Reduzierung der Anzahl von Dimensionen verwenden, um die Anzahl der unabhängigen Variablen zu reduzieren. Dieser Schritt ist natürlich optional. Abhängig von den Situationen können Sie bessere Ergebnisse erzielen, indem Sie alle Variablen beibehalten, jedoch je nach Relevanz eine Gewichtung hinzufügen. Hier kann PCA Ihnen helfen zu berechnen, wie "relevant" die Variable ist.

Sie haben auch erwähnt, dass Ereignisse, die in letzter Zeit aufgetreten sind, wichtiger sein sollten. Wenn dies der Fall ist, können Sie das aktuelle Ereignis höher und das ältere Ereignis niedriger gewichten. Beachten Sie, dass die Wichtigkeit des Ereignisses nicht linear mit der Zeit wachsen muss. Es kann mehr Sinn ergeben, wenn es exponentiell wächst, so dass Sie hier mit den Zahlen spielen können. Oder, wenn Ihnen die Trainingsdaten nicht fehlen, können Sie vielleicht erwägen, zu alte Daten zu löschen.

Wie Yuval F sagte, sieht dies mehr wie ein Regressionsproblem als ein Klassifikationsproblem aus. Daher können Sie versuchen, SVR (Support Vector Regression), die Regressionsversion von SVM (Support Vector Machine) ist.

einige andere Dinge, die Sie versuchen können, sind:

  1. spielen, um mit, wie Sie den Wertebereich des unabhängigen Variablen skalieren. Sprich, normalerweise [-1 ... 1] oder [0 ... 1]. Aber Sie können andere Bereiche ausprobieren, um zu sehen, ob sie helfen. Manchmal tun sie es. Meistens nicht.
  2. Wenn Sie vermuten, dass es "versteckte" Merkmalsvektoren mit einer niedrigeren Dimension gibt, z. B. N < 30 und nichtlinearer Natur, benötigen Sie eine nichtlineare Dimensionalitätsreduktion. Sie können auf Kernel-PCA oder in jüngerer Zeit, vielfältige Bildhauerei lesen.
1

Was Sie beschrieben haben, ist ein klassisches Klassifizierungsproblem. Und meiner Meinung nach, warum neue Algorithmen überhaupt programmieren, wenn man ein Werkzeug wie Weka hat. Wenn ich Sie wäre, würde ich eine Liste von überwachten Lernalgorithmen durchgehen (ich verstehe nicht ganz, warum Leute zuerst unüberwachtes Lernen vorschlagen, wenn dies ein Klassifikationsproblem ist) mit einer 10-fachen (oder k-fachen) Kreuzvalidierung , das ist der Standard in Weka, wenn ich mich erinnere, und sehen, welche Ergebnisse Sie bekommen! Ich würde versuchen:

-Neural Nets
-SVMs
-Decision Bäume (dies wirklich gut für mich gearbeitet, als ich ein ähnliches Problem zu tun)
-Boosting mit Entscheidungsbäumen/Stümpfe
-Anything sonst !

Weka macht die Dinge so einfach und Sie können wirklich nützliche Informationen bekommen. Ich habe gerade einen Kurs zum maschinellen Lernen absolviert und genau das, was Sie mit den obigen Algorithmen erreichen wollen, also weiß ich, wo Sie sind. Für mich hat das Boosten mit Entscheidungsstumps erstaunlich gut funktioniert. (BTW, Boosting ist eigentlich ein Meta-Algorithmus und kann auf die meisten überwachten Lernalgorithmen angewendet werden, um ihre Ergebnisse zu verbessern.)

Eine nette Sache, die Entscheidungsbäume verwendet (wenn Sie die ID3 oder ähnliche Sorte verwenden) ist, dass es wählt die aufzuspaltenden Attribute in der Reihenfolge aus, wie gut sie die Daten differenzieren - mit anderen Worten, welche Attribute die Klassifizierung im Grunde am schnellsten bestimmen. So können Sie den Baum nach dem Ausführen des Algorithmus auschecken und sehen, welches Attribut eines Comicbuches den Preis am stärksten bestimmt - es sollte die Wurzel des Baumes sein.

Edit: Ich denke, Yuval hat Recht, ich habe nicht auf das Problem der Diskretisierung Ihres Preises Wert für die Einstufung. Ich weiß jedoch nicht, ob eine Regression in Weka verfügbar ist, und Sie können immer noch ziemlich leicht Klassifikationstechniken auf dieses Problem anwenden. Sie müssen Klassen von Preiswerten, wie in, eine Reihe von Preisspannen für die Comics machen, so dass Sie eine diskrete Zahl (wie 1 bis 10) haben können, die den Preis des Comics darstellt. Dann kannst du es problemlos klassifizieren.