Deep Learning vs. Steigungserhöhung: Wann was verwenden?


30

Ich habe ein Problem mit großen Datenmengen (z. B. 50 Millionen Zeilen und 200 Spalten). Das Dataset besteht aus ungefähr 100 numerischen Spalten und 100 kategorialen Spalten sowie einer Antwortspalte, die ein Binärklassenproblem darstellt. Die Kardinalität jeder der kategorialen Spalten beträgt weniger als 50.

Ich möchte a priori wissen, ob ich Deep-Learning-Methoden oder Ensemble-Tree-basierte Methoden (z. B. Gradient Boosting, Adaboost oder Random Forest) wählen soll. Gibt es eine explorative Datenanalyse oder andere Techniken, die mir helfen können, mich für eine Methode gegenüber der anderen zu entscheiden?


2
Ich denke, wenn Sie keine guten Kenntnisse über die Dateneigenschaften haben, werden Sie am Ende beide Optionen untersuchen (möglicherweise nur in 500.000 Zeilen) und eine Kreuzvalidierung durchführen. Aber vielleicht gibt es Visualisierungen oder andere Analysen, die Ihnen helfen können, diese Intuition zu bekommen.
Neil Slater

1
Ich habe tatsächlich geplant, diese Woche einen großen Modellvergleich für meine eigene Forschung an realen Daten durchzuführen. Ich werde die Ergebnisse ein wenig aufräumen und sie hier posten. Mindestens ein CS-Student hat die Frage studiert: academia.edu/3526056/…
shadowtalker 20.11.14

1
@NeilSlater Ich würde gerne eine Antwort auf die Frage sehen, was diese Intuition sein könnte / könnte / sollte
shadowtalker

1
Ich habe immer noch nicht genug Ruf, um Ihre ursprüngliche Frage kurz zu kommentieren, und dies ist keine wirkliche Antwort. Auf jeden Fall wollte ich sagen, dass ich denke, dass dieses Papier für dieses Thema ziemlich relevant ist: Fernández-Delgado, M., Cernadas, E., Barro, S. und Amorim, D. (2014). Benötigen wir Hunderte von Klassifikatoren, um die Klassifizierungsprobleme der realen Welt zu lösen? The Journal of Machine Learning Research, 15, 3133–3181. Abgerufen von dl.acm.org/citation.cfm?id=2697065
José María Mateos,

Gibt es eine explorative Datenanalyse oder andere Techniken, die mir helfen können, mich für eine Methode gegenüber der anderen zu entscheiden? Im allgemeinen Fall nein beweist dies der Satz "kein freies Mittagessen". Es gibt jedoch Heuristiken, die Sie möglicherweise in die richtige Richtung leiten,
Simon,

Antworten:


32

Warum beschränken Sie sich auf diese beiden Ansätze? Weil sie cool sind? Ich würde immer mit einem einfachen linearen Klassifikator / Regressor beginnen. In diesem Fall also eine lineare SVM oder logistische Regression, vorzugsweise mit einer Algorithmusimplementierung, die aufgrund der Datengröße die Sparsamkeit ausnutzen kann. Es wird lange dauern, bis ein DL-Algorithmus für dieses Dataset ausgeführt ist. Normalerweise würde ich mich nur mit Spezialproblemen befassen, bei denen die Daten eine hierarchische Struktur aufweisen, z. B. Bilder oder Text. Es ist zu viel des Guten für viele einfachere Lernprobleme und es braucht viel Zeit und Fachwissen, um es zu lernen, und auch DL-Algorithmen sind sehr langsam zu trainieren. Nur weil Sie über 50 Millionen Zeilen verfügen, müssen Sie nicht den gesamten Datensatz verwenden, um gute Ergebnisse zu erzielen. Abhängig von den Daten, Mit einer Stichprobe von einigen 100.000 Zeilen oder einigen Millionen erhalten Sie möglicherweise gute Ergebnisse. Ich würde einfach mit einer kleinen Stichprobe und einem linearen Klassifikator beginnen und von dort aus komplizierter werden, wenn die Ergebnisse nicht zufriedenstellend sind. Zumindest auf diese Weise erhalten Sie eine Grundlinie. Wir haben oft einfache lineare Modelle gefunden, mit denen bei den meisten Aufgaben anspruchsvollere Modelle ausgeführt werden können. Sie möchten also immer dort beginnen.


4
+1 für den Start mit einem einfachen Modell und Unterabtastung
Matt

Ich bin damit einverstanden, SVM für spärliche Daten zu verwenden, aber glauben Sie nicht, dass SVM sehr viel Zeit in Anspruch nehmen wird, um einen so großen dimensionalen Datensatz zu trainieren!
blitu12345

Nein, besonders nicht, wenn es spärlich ist und einen linearen Kernel verwendet. Sie können jedoch Probleme mit einer großen Anzahl von Zeilen haben. In beiden Fällen ist es um einiges schneller als ein DL-Modell. Beachten Sie jedoch, dass ich auch eine logistische Regression empfohlen habe.
Simon

Mein wichtigster Punkt ist, mit einem einfachen linearen Modell zu beginnen und nicht einmal den gesamten Datensatz zu verwenden, da es unwahrscheinlich ist, dass Sie den gesamten Datensatz benötigen, um eine gute Leistung zu erzielen. Ich bezweifle, dass es einen großen Unterschied in der Genauigkeit zwischen der Verwendung von beispielsweise 100.000 Zeilen und einigen Millionen gibt.
Simon

+1 für
vertiefendes

4

Neben anderen Antworten (und einigen guten Links in den Kommentaren) hängt es davon ab, um welches Problem es sich handelt oder welche Art von Fragen Sie beantworten möchten. Da ich nur aufgrund meiner eigenen Erfahrung vorschlagen kann, können die möglichen Methoden im Fall einer Klassifizierungsaufgabe aufgrund der Klassenbalance im Datensatz stark eingeschränkt sein.

Sobald Sie ein größeres Ungleichgewicht als 1:10 erreichen, funktionieren die meisten Klassifizierungsmethoden nicht mehr. Ihnen bleiben Methoden, die auf zufälligen Gesamtstrukturen und möglicherweise neuronalen Netzen basieren (noch nicht ausprobiert). Ich arbeite mit der Klassenbalance im Bereich von 1: 500 bis 1: 1000 und habe festgestellt, dass weder Down- noch Upsampling funktionieren. Glücklicherweise besteht mein Datensatz aus "nur" 6-ml-Beobachtungen mit 200 Variablen und ich bin in der Lage, geboostete Bäume im gesamten Satz in angemessener Zeit auszuführen.

Um Ihre Frage direkt zu beantworten:

  • Sie sollten sich eine Reihe von Fragen überlegen, die Sie beantworten möchten, und im Falle einer Klassifizierung die Klassenbalancen der Zielvariablen überprüfen.

  • Sie sollten die Verteilung (nicht im mathematischen Sinne) fehlender Werte in all Ihren Daten überprüfen und dokumentieren, was Sie finden. Einige ML-Methoden eignen sich gut für fehlende Werte, andere dagegen nicht, und Sie müssen sich mit der Datenimputation befassen (die über eigene Regeln, Richtlinien und Probleme verfügt).


1
Versuchen Sie SGD-Klassifikator von sklearn mit class_weight = "ausgeglichen"
Diego

4

Aus meiner Sicht braucht man für 5 Millionen Instanzen viele Bäume, um eine gute Verallgemeinerung zu erhalten (ein gutes Modell im Laienbegriff). Wenn dies kein Problem ist, dann versuchen Sie es, auch die genaue Antwort hängt von der Art Ihres Problems ab. GBT ist eine gute Methode, insbesondere wenn Sie unterschiedliche Feature-Typen wie kategorial, numerisch usw. verwenden. Darüber hinaus muss im Vergleich zu neuronalen Netzen eine geringere Anzahl von Hyperparametern eingestellt werden. Daher ist es schneller, ein optimales Einstellungsmodell zu haben. Eine weitere Alternative ist das parallele Training. Mit einer guten CPU können Sie mehrere Bäume gleichzeitig trainieren. Wenn Sie mit den Ergebnissen nicht zufrieden sind, entscheiden Sie sich für Neuronale Netze, da dies bedeutet, dass Ihr Modell umfangreicher sein und Informationen höherer Ordnung anhand Ihrer Daten erhalten sollte. Das liegt an den NNs im Vergleich zu anderen Lernalgorithmen.


4

Nach dem, was @Simon bereits gesagt hat:

  1. Deep-Learning-Ansätze waren besonders nützlich bei der Lösung von Problemen in der Bild-, Sprach- und Sprachmodellierung, bei denen das Feature-Engineering schwierig und mit viel Aufwand verbunden ist.
  2. Für Ihre Anwendung scheint dies nicht der Fall zu sein, da Sie genau definierte Funktionen haben und nur Funktionsinteraktionen usw. erforderlich sind.
  3. Angesichts der Tatsache, dass Deep-Learning-Modelle derzeit viel Computerressourcen und Zeit von Wissenschaftlern für das Kodieren von Inhalten benötigen, würde ich vorschlagen, dass Sie sich für einen nicht-Deep-Learning-Ansatz entscheiden.

Für Ihr Problem scheint der Kompromiss zwischen Aufwand und Nutzen nicht zu Gunsten von Deep Learning zu sein. DL wäre ein Overkill


1

Wenn Sie über einen so großen Datenbestand verfügen, können Sie mit einer der statistischen und maschinellen Lernmodellierungstechniken spielen, und dies wird dringend empfohlen. Wie andere vorgeschlagen haben, würde ich auch empfehlen, ein paar Millionen Stichproben von Daten zu nehmen und damit zu spielen. Da es sich um ein Klassifizierungsproblem handelt, würde ich zunächst einfache Klassifizierungstechniken anwenden und später komplexere anwenden. Die logistische Regression ist anfangs großartig.

Ich wollte hinzufügen, dass auch generative Modelle ausprobiert werden müssen. Der Naive Bayes-Klassifikator ist einer der einfachsten Wahrscheinlichkeitsklassifikatoren und übertrifft bei vielen Aufgaben viele komplexe Methoden wie die Unterstützung von Vektormaschinen. Sie können sich diese einfache Implementierung von NB und diesen Link ansehen, um NB mit der logistischen Regression zu vergleichen.

Man kann einen Naive Bayes (NB) -Klassifikator als Basismodell erstellen und dann eine beliebige maschinelle Lernmethode wie SVM (Support Vector Machines) oder MLP (Multilayer Perceptrons) anwenden. Ein Nachteil hierbei ist, dass NB weniger rechenintensiv ist als MLP, sodass eine bessere Leistung von MLP gewünscht wird.

Um genau zu Ihrer Frage zu kommen: Deep Learning und Gradient Tree Boosting sind sehr leistungsfähige Techniken, die jede Art von Beziehung in den Daten modellieren können. Was aber, wenn in Ihrem Fall eine einfache logistische Regression oder NB die gewünschte Genauigkeit liefert? Daher ist es immer besser, zuerst die einfachen Techniken auszuprobieren und eine Grundleistung zu erzielen. Dann kann man sich für die komplexen Modelle entscheiden und mit der Grundlinie vergleichen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.