2012-04-24 6 views
6

Ich muss ein Regressionsmodell über eine große Reihe von Trainings Beispiele, mit dem Potenzial, beliebige Funktionen zu integrieren trainieren. Was Lernalgorithmen sollte ich berücksichtigen und warum?Welche Lernalgorithmus (e) sollte ich in Erwägung ziehen, um ein logarithmisches lineares Regressionsmodell zu trainieren?

Eine kurze Zusammenfassung des Problems:

  • Etwa 5 Millionen Trainingsbeispiele
  • mit einer Rate Trainingsbeispiele von 2-4 Millionen pro Jahr
  • Trainingsbeispiele derzeit 10 Funktionen enthalten Hinzufügen jedes
  • Ungefähr 400k belegte Merkmale (von einem viel größeren Gesamtmerkmal)
  • Zusätzliche Funktionen im Laufe der Zeit hinzugefügt
  • Retraining oder das Modell (mindestens) tägliche Anpassung
  • Optimierungskriterien neue Beispiele zu übernehmen: Mindestanteil Fehler quadriert
  • Ausgang: eine einzige reelle Zahl

ich einige Erfahrung Ausbildung Log- haben lineare Modelle für Klassifizierungsprobleme ähnlicher Größe (mit SVMs, gemittelten und gewichteten Perzeptrons usw.) Die Fähigkeit, beliebige Merkmale hinzuzufügen, ist wichtig, aber in diesem Fall ist auch die Trainingszeit wertvoll.

Zum Beispiel brauchte mein bisheriges Experiment mit SVMLight mehrere Wochen, um auf eine Teilmenge dieser Daten zu konvergieren. Wir könnten parallel zu einer Multicore-Maschine oder (möglicherweise) einem Cluster arbeiten, aber wir müssen Modelle in Minuten trainieren. Online-Training wäre noch besser.

Ich trainierte ein Averaged Perceptron Modell erfolgreich (und schnell). Nach meinem Wissen wird der AP normalerweise nicht auf die Regression angewendet. Bietet der AP Konvergenzgarantien für ein Regressionsmodell? Gibt es einen anderen formellen Grund, warum es nicht anwendbar sein sollte? Oder ist das eine angemessene Übereinstimmung für meine Anforderungen?

Welche anderen Optionen sollte ich erforschen? Eine SVM würde wahrscheinlich eine höhere Genauigkeit bieten, aber eine quadratische Trainingszeit ist nicht akzeptabel. Wenn lineare SVM-Algorithmen zugänglich sind, könnte das gut funktionieren.

Potential Plus:

  • Online-Training
  • Open-Source-Implementierung zur Verfügung (idealerweise in Java). Wir können bei Bedarf eine eigene Implementierung durchführen, aber das werde ich nach Möglichkeit vermeiden.

Vielen Dank für Ihre Eingabe.

+0

Für die Klassifizierung hatte ich viel Erfolg mit stochastischen Gradienten-Abstieg SVMs (http://leon.bottou.org/projects/sgd#) - Sie könnten sehen, es für die Regression anzupassen. – etarion

Antwort

7

Dies ist das klassische Problem mit SVM in großem Maßstab. Ein SVM-Modell müsste neu trainiert werden, wenn neue Funktionen hinzugefügt werden und wenn neue Daten hinzugefügt werden, wenn Sie kein Online-SVM verwenden. Einige Optionen:

Praktische Optionen (aus dem Regal):

liblinear - Wenn Sie Linear SVM tun können, gibt es einige Algorithmen, die die Vorteile der linearen Kern, um eine bessere als quadratische Trainingszeit.Check out LIBLINEAR aus der gleichen Forschungsgruppe wie libsvm. Sie haben die gestern veröffentlichte Version 1.91 um eine Regression ergänzt. http://www.csie.ntu.edu.tw/~cjlin/liblinear/

Oracle ODM - Oracle hat SVM in seinem ODM-Paket verfügbar. Sie verwenden einen praktischen Ansatz, um im Grunde "gut genug" SVM bereitzustellen, ohne die rechnerischen Kosten zu bezahlen, um eine wirklich optimale Lösung zu finden. Sie verwenden einige Probenahme und Modellauswahl Techniken - Sie hier die Daten finden: http://www.oracle.com/technetwork/database/options/advanced-analytics/odm/overview/support-vector-machines-paper-1205-129825.pdf

SHOGUN - Die SHOGUN Machine Learning Toolbox entwickelt, ist für eine groß angelegte Lernen sie eine Schnittstelle mit einer Reihe von SVM-Implementierungen sowie andere Methoden. Ich habe es nie benutzt, aber es könnte einen Blick wert sein: http://www.shogun-toolbox.org

Kernel-machines.org hat eine Liste von Softwarepaketen: http://www.kernel-machines.org/software

Andere SVM Forschung

Wenn Sie Wenn Sie versuchen, Ihre eigenen Rollen zu erstellen, gibt es eine Reihe von Techniken, SVM auf große Datensätze zu skalieren, die in Forschungsberichten veröffentlicht wurden, aber der Code ist nicht unbedingt verfügbar, nutzbar oder wird wie die obigen Beispiele beibehalten. Sie behaupten gute Ergebnisse, aber jedes hat seine eigenen Nachteile. Viele beinhalten ein gewisses Maß an Datenauswahl. Zum Beispiel verwenden mehrere Forschungsarbeiten lineare Zeitcluster-Algorithmen, um die Daten zu clustern und aufeinanderfolgende SVM-Modelle auf der Basis der Cluster zu trainieren, um das Modell ohne die Verwendung aller Daten zu erstellen. Core Vector Machines behaupten eine lineare Trainingszeit, aber es gibt einige Kritik darüber, ob ihre Genauigkeit so hoch ist, wie sie behaupten. Zahlreiche Artikel verwenden verschiedene heuristische Algorithmen, um zu versuchen, die wahrscheinlichsten Unterstützungsvektorkandidaten auszuwählen. Viele davon dienen der Klassifizierung, könnten aber wahrscheinlich an Regression angepasst werden. Wenn Sie mehr Informationen über einige dieser Forschungen haben möchten, kann ich einige Referenzen hinzufügen.

Werkzeuge für die Erkundung Algorithmen

Sie sind wahrscheinlich bereits vertraut sein mit diesen, aber ich dachte, ich es nur für den Fall in hier werfen würde:

Es gibt auch andere Algorithmen, die eine gute Laufzeit auf großen Datenmengen, aber ob sie gut funktionieren, ist schwer zu sagen, es hängt von der Zusammensetzung Ihrer Daten ab. Da die Laufzeit wichtig ist, würde ich mit den einfacheren Modellen beginnen und bis zu den komplexeren arbeiten. ANN, Decision Tree Regression, Bayes-Methoden, Regional gewichtete lineare Regression oder ein Hybrid-Ansatz wie Modellbäume, die ein Entscheidungsbaum, dessen Blatt ist Knoten sind lineare Modelle können alle schneller auf große Datensätze als SVM durchgeführt werden und kann produzieren gute Ergebnisse.

WEKA - Weka ist ein gutes Werkzeug, um Ihre Möglichkeiten zu erkunden. Ich würde WEKA verwenden, um Teilmengen Ihrer Daten in verschiedenen Algorithmen auszuprobieren. Der Quellcode ist offen und in Java, wenn Sie etwas auswählen, können Sie es an Ihre Bedürfnisse anpassen. http://www.cs.waikato.ac.nz/ml/weka/

R - Die R-Programmiersprache implementiert ebenfalls viele Algorithmen und ähnelt der Programmierung in Matlab. http://www.r-project.org/

Ich würde nicht WEKA oder R nicht einen großen Datensatz empfehlen, aber sie sind nützliche Werkzeuge für den Versuch, einzugrenzen, welche Algorithmen gut für Sie arbeiten können.

+0

Danke für die Bearbeitung vitalik :) – karenu

+0

Danke für die ausführliche Antwort. Ich würde es mehr als einmal abstimmen, wenn ich könnte. ;-) Ich glaube, ich habe LibLinear vor einiger Zeit angeschaut, als ich an einem ähnlichen Problem gearbeitet habe, aber ich habe es wegen der Trainingszeit weitergegeben. Ich wusste nicht, dass es jetzt lineares Training unterstützt. Es klingt, als könnte das eine sehr gute Option sein. – AaronD

+0

Tut mir leid, ich habe nicht gesagt, es war lineare Zeit, nur besser als quadratisch. Es verwendet den linearen Kernel. Es liefert eine eps-genaue Lösung in O (log (1/eps)) Iterationen zu Kosten von O (ln) Iterationen, wobei l die Anzahl der Trainingspunkte und n die durchschnittliche Anzahl von Nicht-Null-Elementen pro Instanz ist. Je spärlicher Ihre Daten sind, desto näher nähern Sie sich der linearen Zeit. – karenu

Verwandte Themen