Warum ist svm nicht so gut wie ein Entscheidungsbaum für dieselben Daten?

8

Ich bin neu im maschinellen Lernen und versuche, mit Scikit-Learn (sklearn) ein Klassifizierungsproblem zu lösen. Sowohl DecisionTree als auch SVM können einen Klassifikator für dieses Problem trainieren.

Ich verwende sklearn.ensemble.RandomForestClassifierund sklearn.svm.SVCpasse die gleichen Trainingsdaten an (ca. 500.000 Einträge mit 50 Funktionen pro Eintrag). Der RandomForestClassifier bringt in etwa einer Minute einen Klassifikator heraus. Der SVC benötigt mehr als 24 Stunden und läuft weiter.

Warum arbeitet der SVC so ineffizient? Ist der Datensatz für SVC zu groß ? Ist SVC für ein solches Problem ungeeignet ?

Java Xu
quelle

Antworten:

12

Zu den Möglichkeiten gehören die Verwendung eines ungeeigneten Kernels (z. B. eines linearen Kernels für ein nichtlineares Problem), eine schlechte Auswahl des Kernels und Regularisierungshyperparameter. Gute Modellauswahl (die Wahl des Kernels und die Optimierung der Hyperparameter ist der Schlüssel zu einer guten Leistung von SVMs. Es ist nur zu erwarten, dass sie bei korrekter Verwendung gute Ergebnisse liefern).

Das Trainieren von SVMs dauert oft sehr lange. Dies gilt insbesondere dann, wenn die Auswahl des Kernels und insbesondere der Regularisierungsparameter dazu führt, dass fast alle Daten als Unterstützungsvektoren enden (die Sparsamkeit von SVMs ist ein praktisches Nebenprodukt, nichts weiter).

Schließlich besagen die Theoreme ohne kostenloses Mittagessen, dass es für kein Klassifikatorsystem eine a priori Überlegenheit gegenüber den anderen gibt, so dass der beste Klassifikator für eine bestimmte Aufgabe selbst aufgabenabhängig ist. Es gibt jedoch eine überzeugendere Theorie für die SVM, die darauf hinweist, dass sie für viele Probleme wahrscheinlich die bessere Wahl ist als viele andere Ansätze.

Dikran Beuteltier
quelle
2
1. Woher weiß ich, ob ein Problem linear ist oder nicht? Nach den Trainingsdaten? 2. Könnten Sie einige Materialien empfehlen, wie Sie eine gute Auswahl des Kernels treffen und den Hyperparameter optimieren können?
Java Xu
Es ist im Allgemeinen nicht sicher zu wissen, dass ein Problem linear ist, aber nichtlineare Klassifikatoren, die nichtlineare Klassifikatoren durchweg übertreffen, sind ein klarer Hinweis darauf, dass es sich um eine nichtlineare Aufgabe handelt.
Dikran Beuteltier
Für die Optimierung der Kernel- und Regularisierungsparameter ist die Kreuzvalidierung ein vernünftiger Ansatz, bei dem entweder eine Rastersuche oder eine numerische Optimierungsmethode verwendet wird (ich verwende Nelder Mead simplex). Für SVMs bietet die "Span-Grenze" eine nützliche Annäherung an den ausgelassenen Kreuzvalidierungsfehler. Beachten Sie, dass Sie so etwas wie eine verschachtelte Kreuzvalidierung verwenden müssen, wenn Sie auch eine unvoreingenommene Leistungsschätzung wünschen (siehe die Antworten auf andere Fragen, die ich gestellt habe).
Dikran Beuteltier
1
500.000 Datenpunkte sind ein Problem, das groß genug ist, dass das Trainieren von Kernel-SVMs wahrscheinlich eine Weile dauert. Es lohnt sich, LinearSVM auszuprobieren, das nur einen linearen Klassifikator unterstützt, aber viel schneller läuft, oder einen SGD-Klassifikator , der möglicherweise noch schneller ist. Wenn dies nicht gut funktioniert, können Sie versuchen, die Kernel-Approximation zu verwenden , mit der Sie einen linearen Klassifikator verwenden können, um einen nichtlinearen zu approximieren. Allerdings sind zufällige Gesamtstrukturen auch ein guter Algorithmus und möglicherweise am besten für Ihre Daten geeignet.
Dougal
17

Entscheidungsbäume und zufällige Wälder sind eigentlich extrem gute Klassifikatoren. Obwohl SVMs (Support Vector Machines) als komplexer angesehen werden, bedeutet dies nicht, dass sie eine bessere Leistung erbringen.

Die Arbeit "Ein empirischer Vergleich von überwachten Lernalgorithmen" von Rich Caruana verglich 10 verschiedene binäre Klassifikatoren, SVM, Neuronale Netze, KNN, logistische Regression, naive Bayes, zufällige Wälder, Entscheidungsbäume, eingesackte Entscheidungsbäume, verstärkte Entscheidungsbäume und Bootstrapped-Entscheidungen Bäume auf elf verschiedenen Datensätzen und verglichen die Ergebnisse auf 8 verschiedenen Leistungsmetriken.

Sie fanden heraus, dass Boosted-Entscheidungsbäume zuerst mit Random Forests und dann mit Bagged Decision Trees und dann mit SVM eingingen

Die Ergebnisse hängen auch davon ab, für wie viele Klassen Sie tatsächlich klassifizieren.

RMcG
quelle
5

"ob ein Problem linear ist oder nicht" Wenn bei einem binären Klassifizierungsproblem der Datensatz durch eine Hyperebene getrennt werden kann, handelt es sich um ein lineares Problem.

Wenn der Datensatz nicht linear trennbar ist, während Sie versuchen, einen linearen Klassifikator zu finden, um eine solche Hyperebene zu finden, die überhaupt nicht existiert, scheint der Algorithmus für immer zu laufen.

Ein Vorschlag: Sie können einen kleinen Teil Ihrer Daten abtasten und diese Algorithmen ausprobieren, um festzustellen, ob sie in einem kleinen Datensatz funktionieren. Erhöhen Sie dann den Datensatz, um zu überprüfen, wann dieses Problem auftritt.

Shusen Liu
quelle