Sollten wir immer einen Lebenslauf machen?

9

Meine Frage: Soll ich auch für einen relativ großen Datensatz einen Lebenslauf machen?

Ich habe einen relativ großen Datensatz und werde einen Algorithmus für maschinelles Lernen auf den Datensatz anwenden.

Da mein PC nicht schnell ist, dauert der Lebenslauf (und die Rastersuche) manchmal zu lange. Insbesondere endet eine SVM nie aufgrund vieler Abstimmungsparameter. Wenn ich also einen Lebenslauf mache, muss ich relativ kleine Daten auswählen.

Andererseits sollte der Validierungssatz auch groß sein, daher halte ich es für eine gute Idee, einen Validierungssatz zu verwenden, der dieselbe (oder eine größere) Größe wie der Trainingssatz hat. (Anstelle von CV verwende ich nämlich einen großen Validierungssatz für die Parametereinstellung.)

Ich habe jetzt also mindestens zwei Möglichkeiten.

  1. Führen Sie einen Lebenslauf für einen kleinen Datensatz durch.
  2. Verwenden Sie einen relativ großen Trainingssatz und einen Validierungssatz ohne Lebenslauf.
  3. andere Idee.

Was ist die beste Idee? Theoretische oder praktische Meinungen sind willkommen.

H. Shindoh
quelle
1
Diese Frage sollte offensichtlich ein CW sein.
H. Shindoh
1
Was ist groß? Wie viele Beobachtungen? Wie viele Features / Variablen / Regressoren?
Jim
1
Es hängt von einem PC ab. Ich denke nämlich nicht an "Big Data", für die mehrere Computer erforderlich sind.
H. Shindoh

Antworten:

3

Im Allgemeinen müssen Sie nicht immer die Kreuzvalidierung verwenden. Ziel des Lebenslaufs ist es, eine stabilere Schätzung der Generalisierbarkeit Ihres Klassifikators zu erhalten, die Sie mit nur einem Testsatz erhalten würden. Sie müssen keinen Lebenslauf verwenden, wenn Ihr Datensatz riesig ist. Wenn Sie also Ihrem Trainingssatz Daten hinzufügen, wird Ihr Modell nicht wesentlich verbessert, und nur wenige zufällige Fehlklassifizierungen in Ihrem Testsatz ändern Ihre Leistungsmetrik nicht wirklich .

Wenn Sie einen kleinen Trainingssatz und einen großen Testsatz haben, wird Ihre Einschätzung voreingenommen sein. Es wird also wahrscheinlich schlimmer sein als das, was Sie erhalten würden, wenn Sie mehr Trainingsdaten und optimale Hyperparameter verwenden, die Sie für größere Datenmengen als unterschiedlich empfunden haben, einfach weil mehr Daten weniger Regularisierung erfordern.

Das Erhalten optimaler Hyperparameter ist jedoch sowieso nicht der wichtige Teil und wird die Leistung nicht dramatisch verbessern. Sie sollten Ihre Energie darauf konzentrieren, das Problem zu verstehen, gute Funktionen zu erstellen und Daten in einen guten Zustand zu bringen.

Hier sind einige Dinge, die Sie berücksichtigen können, um die Dinge zu beschleunigen:

  1. Trainiere es mit weniger Funktionen. Verwenden Sie die Funktionsauswahl und / oder Dimensionsreduzierung, um die Größe Ihres Problems zu verringern
  2. Verwenden Sie für SVM einen vorgespeicherten Kernel
  3. Verwenden Sie Algorithmen, die keine Hyperparameter in einem Raster auswählen müssen. Besonders lineare wie logistische Regression mit Ridge / Lasso / elastischer Nettostrafe oder sogar linearer SVM. Abhängig von der Implementierung können diese Klassifizierer Modelle für alle Hyperparameter im ausgewählten Pfad anpassen, wobei die Kosten für die Anpassung nur eines anfallen
  4. Verwenden Sie eine schnellere Implementierung für Ihre Art von Problem (Sie müssen es googeln).

und selbst mit einem langsameren Computer können Sie:

  1. Verwenden Sie mehr Kerne
  2. Verwenden Sie eine GPU
rep_ho
quelle
2

Die Kreuzvalidierung ist ein Tool zum Schätzen der Varianz Ihrer Leistungsmetrik aufgrund von Zufälligkeiten in den Daten (und möglicherweise im Lernalgorithmus, wenn diese nicht deterministisch sind).

Wenn Sie also nur einen Split verwenden, z. B. 80% Zug + 20% Test, und Ihre Leistungsmetrik aus diesem einzelnen Experiment melden, besteht eine gute Chance, dass jeder, der versucht, Ihr Experiment mit genau denselben Parametern zu reproduzieren, eine andere Leistungszahl findet (manchmal sehr anders). Es sei denn, Sie geben genau die gleiche Aufteilung an, die bedeutungslos ist.

Um auf Ihre Frage zurückzukommen, sollten Sie auf jeden Fall den Lebenslauf verwenden, um Ihre Leistung zu melden (z. B. einen 10-fachen Lebenslauf erstellen und den Mittelwert und die Standardabweichung der Leistungsmetrik angeben). Zum Optimieren Ihres Algorithmus können Sie jetzt einen viel kleineren Validierungssatz verwenden, der aus dem Trainingssatz entnommen wurde (stellen Sie sicher, dass er nicht im Testsatz enthalten ist).

Wenn Sie befürchten, dass Sie mit einem kleinen Satz nicht die besten Hyperparameter finden, passen Sie Ihren Algorithmus wahrscheinlich an die Besonderheiten des Datensatzes an. Wenn Sie mit einem kleinen Beispiel keine Konfiguration finden können, die eine angemessene Leistung für alle Falten bietet, ist der Algorithmus in der Praxis wahrscheinlich nicht sehr nützlich.

Beachten Sie auch, dass einige Algorithmen einfach zu langsam sind / in einigen Konfigurationen nicht gut skaliert werden können. Dies ist auch Teil der praktischen Modellauswahl.

Da Sie SVMs erwähnen, sind die meisten Implementierungen natürlich langsam, wenn Sie versuchen, Parameter für nichtlineare Kernel durch Rastersuche zu finden. Die Rastersuche ist exponentiell komplex. Verwenden Sie sie daher mit sehr wenigen Parametern. Denken Sie auch daran, dass die meisten Bibliotheken sinnvolle Standardparameter bereitstellen (oder zumindest einen Parameter festlegen und die anderen Heuristiken festlegen).

oDDsKooL
quelle