2010-03-05 8 views
7

Ich arbeite an einem möglichen maschinellen Lernprojekt, von dem erwartet wird, dass es Hochgeschwindigkeitsrechnungen für maschinelles Lernen unter Verwendung von SVM (Support Vector Machines) und möglicherweise einigen ANN durchführt.Großvolumiges SVM (Machine Learning) System

Ich bin sehr zufrieden mit Matlab mit diesen arbeiten, aber vor allem in kleinen Datensätzen, nur zum Experimentieren. Ich frage mich, ob dieser Matlab-basierte Ansatz skalieren wird? oder sollte ich etwas anderes suchen? C++/GPU basiertes Computing? Java-Wrapping des Matlab-Codes und schieben es auf App-Engine?

Übrigens, es scheint eine Menge Literatur über GPUs zu geben, aber nicht viel darüber, wie nützlich sie auf maschinellen Lernanwendungen mit Matlab sind, & die billigste CUDA enabled GPU Geld kaufen kann? Ist es die Mühe wert?

Antwort

5

Sowohl libsvm als auch SVM light haben Matlab-Schnittstellen. Außerdem sind die meisten Lernaufgaben trivial parallelisierbar. Sehen Sie sich Matlab-Befehle wie parfor und den Rest der Parallel Computing Toolbox an.

7

Ich arbeite an Mustererkennung Probleme. Lassen Sie mich Ihnen bitte einige Ratschläge geben, wenn Sie effektiv mit SVM/ANN-Problemen arbeiten und keinen Zugriff auf einen Computer-Cluster haben:

1) Verwenden Sie kein Matlab. Verwenden Sie stattdessen Python und seine große Anzahl an numerischen Bibliotheken zur Visualisierung/Analyse Ihrer Berechnungen.
2) Kritische Abschnitte besser mit C zu implementieren. Sie können sie dann mit Ihren Python-Skripten sehr einfach integrieren.
3) CUDA/GPU ist keine Lösung, wenn Sie sich hauptsächlich mit nicht-polinomialen Zeitkomplexitätsproblemen beschäftigen, was typisch für maschinelles Lernen ist, so dass es keine große Beschleunigung bringt; dot/matrix-Produkte sind nur ein kleiner Teil der SVM-Berechnungen - Sie müssen sich immer noch mit Feature-Extraktionen und Listen-/Objektverarbeitung beschäftigen, stattdessen versuchen Sie, Ihre Algorithmen zu optimieren und effektive algorithmische Methoden zu entwickeln. Wenn Sie Parallelität benötigen (z. B. für KNNs), verwenden Sie Threads oder Prozesse.
4) Verwenden Sie GCC-Compiler, um Ihr C-Programm zu kompilieren - es wird den sehr schnellen ausführbaren Code erstellen. Um numerische Berechnungen zu beschleunigen, können Sie GCC-Optimierungs-Flags (z. B. Streaming SIMD Extensions) ausprobieren.
5) Führen Sie Ihr Programm auf jeder modernen CPU unter Linux OS aus.

Verwenden Sie für eine wirklich gute Leistung Linux-Cluster.

+0

ist Matlab, dass schlecht für SVN, oder denken Sie nur Python im allgemeinen preferrable ist? – Jonas

+1

@Jonas: Ja, Matlab wird nicht empfohlen, weil: 1) Es ist ein proprietäres Nicht-Open-Source-Produkt -> Es kann nur in einer sehr begrenzten Anzahl von Umgebungen laufen (zB OS = {Windows, Mac}, CPU = {x86} usw.). 2) Matlab verwendet Klammern für die Indizierung in ein Array und das Aufrufen einer Funktion -> Sie werden Probleme haben, Ihr ausreichend großes Programm zu lesen. 3) Matlab ist extrem langsam, weil die Eingabeargumente zu einer Funktion kopiert und nicht wie in Python referenziert werden. – psihodelia

+2

Eigentlich (1) Matlab läuft in allen gängigen Umgebungen. Ich verwende es zum Beispiel unter 64-Bit Windows, OSX und Linux. (2) Da die Indizierung in ein Array grundsätzlich eine Funktion aufruft (subsref, die Sie überladen können, wenn Sie wollen), sehe ich nicht, warum dies ein Problem sein sollte - und zumindest für mich kommt Lesbarkeit durch Strukturieren und Kommentieren von Code, nicht aus Klammern, und (3) Matlab macht Copy-on-Write, was sowieso viel mehr ein Problem des Gedächtnisses als der Geschwindigkeit wäre. Mit anderen Worten, es scheint kein Problem mit der SVN-Implementierung von Matlab zu geben, aber Sie mögen das Programm einfach nicht. – Jonas

2

Ich würde raten, Matlab für alles außer Prototyping zu verwenden. Wenn das Projekt komplexer und umfangreicher wird, wird der Anteil des eigenen Codes gegenüber den Funktionen von Matlab und Toolboxen zunehmen. Je entwickelter das Projekt wird, desto weniger profitieren Sie von Matlab und je mehr Sie Funktionen, Bibliotheken und - noch wichtiger - Praktiken, Prozesse und Werkzeuge für allgemeine Sprachen benötigen.

Skalierung der Matlab-Lösung wird durch die Schnittstelle mit Nicht-Matlab-Code erreicht, und ich habe gesehen, Matlab-Projekt zu nichts mehr als ein Kleber Aufruf Module in Mehrzwecksprachen geschrieben. Alltägliche Schmerzen für alle Beteiligten verursachen.

Wenn Sie mit Java vertraut sind, würde ich empfehlen, es zusammen mit einer guten mathematischen Bibliothek zu verwenden (zumindest können Sie immer MKL verbinden). Selbst mit den jüngsten Matlab-Optimierungen sind MKL + JVM viel schneller - Skalierung und Wartbarkeit sind unvergleichlich.

C++ mit prozessorspezifischen intrinsics kann bessere Leistung bieten, aber zu einem Preis der Entwicklungszeit und Wartbarkeit. Das Hinzufügen von CUDA verbessert die Leistung weiter, aber die Menge an Arbeit und spezifischem Wissen ist es kaum wert.Sicherlich nicht, wenn Sie keine Erfahrung mit GPU-Berechnungen haben. Sobald Sie über den Einzelprozessor hinausgehen, ist es viel effektiver, dem System eine oder zwei weitere CPUs hinzuzufügen, als mit GPU-Berechnungen zu kämpfen.

+0

ima, danke dafür - ich habe eine vernünftige Menge an Programmierung mit Java gemacht, also nehme ich an, dass ich etwas mehr für dieses Projekt herausfinden muss. die überwiegende Mehrheit der Dinge, die ich im Internet zu finden scheinen, ist ziemlich evangelikalen, die eine oder andere Weise - es ist schwer zu ausgewogenen Meinungen zu finden - also danke für Ihre Kommentare :) – malangi

+1

mehr über Cuda und libsvm: http: // mklab .iti.gr/Projekt/GPU-LIBSVM –

0

Nichts wird jetzt über ein Limit hinaus skalieren. libsvm hat ein Werkzeug für die Auswahl von Teilmengen, um eine Reihe von Datenpunkten für das Training auszuwählen. Vergessen Sie ANN, es wird nicht verallgemeinern, und es gibt keine Theorie, die hilft, die Anzahl der versteckten Knoten usw. zu wählen. Es muss viel manuell optimiert werden und kann in lokalen Minima gefangen werden .. Gehen Sie mit SVM nur

Verwandte Themen