Ich muss auf meinem Laptop einen linearen Klassifikator mit hunderttausenden Datenpunkten und etwa zehntausenden Funktionen trainieren. Welche Möglichkeiten habe ich? Was ist der Stand der Technik für diese Art von Problem?
Der stochastische Gradientenabstieg scheint eine vielversprechende Richtung zu sein, und ich bin der Meinung, dass dies auf dem neuesten Stand ist:
"Pegasos: Primal Estimated sub-GrAdient SOlver für SVM" Shai Shalev-Shwartz, Yoram Sänger, Nathan Srebro, Andrew Cotter. "Mathematische Programmierung, Serie B, 127 (1): 3-30, Jahr: 2007."
Ist das der Konsens? Sollte ich in eine andere Richtung schauen?
classification
carlosdc
quelle
quelle
Antworten:
Ich denke, Sie sollten sich die Online-Lernmethoden ansehen . Das Perzeptron und das Kernel-Perzeptron sind extrem einfach zu codieren und funktionieren in der Praxis sehr gut, und es gibt eine ganze Reihe weiterer Online-Methoden. Beachten Sie, dass jede Online-Lernmethode in einen Batch-Lernalgorithmus umgewandelt werden kann. In diesem Fall ähneln sie stark den stochastischen Gradientenabstiegsmethoden.
Wenn Sie Matlab verwenden, gibt es eine wirklich schöne Toolbox namens DOGMA von Francesco Orabona, die eine Reihe von Online-Lernalgorithmen enthält, und Sie können damit einige verschiedene Methoden bewerten. Ich habe dies in einigen meiner Nachforschungen verwendet und fand es sehr nützlich (beachte, dass, soweit ich mich erinnere, die Daten als [features x examples] erwartet werden, so dass du sie möglicherweise umsetzen musst).
Wie andere bereits erwähnt haben, möchten Sie möglicherweise die Dimensionsreduzierung ausprobieren. PCA ist hier möglicherweise keine so gute Option, da Sie die Kovarianzmatrix berechnen müssen, was sehr kostspielig sein wird. Sie könnten versuchen, zufällige Projektionen zu betrachten . Die Theorie ist hart, aber das Prinzip ist sehr einfach. Es basiert auf der Johnson-Lindenstrauss Lemma , wenn Sie daran interessiert ist , aber die Grundidee ist , dass , wenn Sie zufällig auf einen niedrigeren dimensionalen Raum projizieren, dann Abstände zwischen den Punkten sind bis zu einem gewissen erhalten bis ε . Wenn Sie einen RBF-Kernel verwenden, sind ℓ 2 Entfernungen alles , woran Sie interessiert sind!ℓ2 ϵ ℓ2
quelle
Zunächst möchte ich Sie fragen, woher Sie wissen, dass ein linearer Klassifikator die beste Wahl ist. Intuitiv ist es für einen so großen Raum (R ^ 10000) möglich, dass ein anderer nichtlinearer Klassifikator die bessere Wahl ist.
Ich schlage vor, dass Sie mehrere verschiedene Klassifikatoren ausprobieren und die Vorhersagefehler beobachten (ich würde mehrere regulierte Klassifikationsmodelle ausprobieren).
Wenn Ihnen der Speicher ausgeht, reduzieren Sie die Dimension mithilfe von PCA
quelle
Sie können PCA auch zum Reduzieren von Dimensionen verwenden, ohne die Kovarianzmatrix zu berechnen. Verwenden Sie dazu das neuronale Newtork-Äquivalent von PCA.
Hier ist ein Artikel, der es beschreibt (aber ich empfehle Ihnen, Ihre eigene Suche durchzuführen): http://users.ics.tkk.fi/oja/Oja1982.pdf , und hier ist ein Link zu etwas, das möglicherweise funktioniert: http : //www.cs.purdue.edu/homes/dgleich/projects/pca_neural_nets_website/index.html .
quelle
Wie von jb vorgeschlagen, halte ich es für besser, eine "Dimensionsreduktions" -Methode zu verwenden. Prinzipielle Komponentenanalyse (PCA) ist eine beliebte Wahl. Sie können auch unbeaufsichtigte Lerntechniken ausprobieren. Weitere Informationen zum unbeaufsichtigten Lernen von Features finden Sie unter http://ufldl.stanford.edu/wiki/index.php/UFLDL_Tutorial
quelle