Ich denke, ein erster Schritt ist zu überprüfen, ob das gemeldete Training und die Testleistung tatsächlich korrekt sind.
- Erfolgt die Aufteilung während der 5-fachen Kreuzvalidierung auf eine Weise, die statistisch unabhängige CV-Zug- / Test-Sets ergibt? ZB wenn es wiederholte Messungen in den Daten gibt, landen sie immer in der gleichen Menge?
- Eine Genauigkeit von 95,83% in einem 5-fachen Lebenslauf von 150 Proben entspricht 5 von 130 falschen Trainingsproben für die 5 Ersatzmodelle oder 25 falschen Fällen für 5 * 130 Trainingsproben.
Eine Testgenauigkeit von 98,21% ist schwieriger zu erklären: Während eines Durchlaufs des Lebenslaufs sollte jeder Fall einmal getestet werden. Daher sollten die möglicherweise gemeldeten Zahlen in Schritten von 100% / 150 angegeben werden. 98,21% entsprechen 2,68 falschen Fällen (2 und 3 falsche von 150 Testfällen ergeben eine Genauigkeit von 98,67 bzw. 98,00%).
Wenn Sie Ihr Modell extrahieren können, berechnen Sie die gemeldeten Genauigkeiten extern.
- Was sind die gemeldeten Genauigkeiten für zufällige Eingaben?
- Führen Sie eine externe Quervalidierung durch: Teilen Sie Ihre Daten auf und übergeben Sie nur den Trainingsteil an das Programm. Vorhersage der "externen" Testdaten und Berechnung der Genauigkeit. Entspricht dies der Programmausgabe?
- Stellen Sie sicher, dass die gemeldete "Testgenauigkeit" aus unabhängigen Daten stammt (doppelte / verschachtelte Kreuzvalidierung): Wenn Ihr Programm datengetriebene Optimierungen durchführt (z. B. Auswahl der "besten" Funktionen durch Vergleich vieler Modelle), entspricht dies eher einem Trainingsfehler (Güte) of fit) als wie ein Generalisierungsfehler.
Ich stimme @mbq zu, dass Trainingsfehler beim maschinellen Lernen kaum nützlich sind. Sie befinden sich jedoch möglicherweise in einer der wenigen Situationen, in denen dies tatsächlich nützlich ist: Wenn das Programm durch Vergleichen der Genauigkeiten ein "bestes" Modell auswählt, aber nur Trainingsfehler zur Auswahl hat, müssen Sie prüfen, ob der Trainingsfehler tatsächlich einen vernünftigen zulässt Wahl.
@mbq skizzierte das Best-Case-Szenario für nicht unterscheidbare Modelle. Es gibt jedoch auch schlimmere Szenarien: Genau wie die Testgenauigkeit unterliegt auch die Trainingsgenauigkeit einer Varianz, ist jedoch im Vergleich zur Generalisierungsgenauigkeit, die normalerweise von Interesse ist, optimistisch eingestellt. Dies kann zu einer Situation führen, in der Modelle nicht unterschieden werden können, obwohl sie tatsächlich eine unterschiedliche Leistung aufweisen. Ihre Trainings- (oder internen Lebenslauf-) Genauigkeiten sind jedoch zu eng, um sie aufgrund ihrer optimistischen Tendenz zu unterscheiden. Beispielsweise können iterative Merkmalsauswahlmethoden solchen Problemen unterliegen, die sogar für die internen Kreuzvalidierungsgenauigkeiten bestehen bleiben (abhängig davon, wie diese Kreuzvalidierung implementiert wird).
Wenn ein solches Problem auftreten könnte, ist es meiner Meinung nach eine gute Idee, zu prüfen, ob die vom Programm für die Entscheidung verwendeten Genauigkeiten möglicherweise zu einer vernünftigen Auswahl führen. Dies würde bedeuten, zu überprüfen, ob die interne Lebenslaufgenauigkeit (die angeblich zur Auswahl des besten Modells herangezogen wird) in Bezug auf einen extern durchgeführten Lebenslauf mit statistisch unabhängiger Aufteilung nicht oder nicht zu optimistisch ist. Auch hier können synthetische und / oder zufällige Daten helfen, herauszufinden, was das Programm tatsächlich tut.
In einem zweiten Schritt muss geprüft werden, ob die beobachteten Unterschiede für statistisch unabhängige Teilungen sinnvoll sind, wie @mbq bereits ausgeführt hat.
Ich schlage vor, Sie berechnen, welchen Genauigkeitsunterschied Sie bei der angegebenen Stichprobengröße beachten müssen, um einen statistisch aussagekräftigen Unterschied zu erhalten. Wenn Ihre beobachtete Variation geringer ist, können Sie nicht entscheiden, welcher Algorithmus mit Ihrem gegebenen Datensatz besser ist: Eine weitere Optimierung ist nicht sinnvoll.
Die Genauigkeit eines Trainingssatzes macht beim maschinellen Lernen keinen Sinn. Ignoriere es.
quelle
Es gibt ein paar ernsthafte Probleme mit der Art und Weise, wie Sie dies getan haben. Erstens ist die Datenaufteilung nur dann zuverlässig, wenn die gesamte Stichprobengröße sehr groß ist. Sie würden unterschiedliche Ergebnisse erhalten, wenn Sie erneut aufteilen. Unter anderem berücksichtigen Sie keine Konfidenzintervalle für Genauigkeitsschätzungen. Zweitens ist eine fünffache Kreuzvalidierung nicht präzise genug. Möglicherweise muss es 100 Mal wiederholt werden, um eine ausreichende Präzision zu erzielen. Drittens haben Sie als Genauigkeitsbewertung eine diskontinuierliche Regel für eine fehlerhafte Bewertung gewählt (Verhältnis richtig klassifiziert). Solch eine falsche Bewertungsregel führt zur Auswahl des falschen Modells.
quelle
Nehmen wir an, dass die Implementierung der Algorithmen fehlerfrei ist, und schauen wir uns das Problem an.
Stellen Sie sich vor, Sie nehmen eine kleine Teilmenge Ihrer Trainingsdaten und führen Ihren Lernalgorithmus darauf aus. Es wird offensichtlich sehr gut tun. Es ist immer möglich, eine Teilmenge zu extrahieren, die eine Genauigkeit von fast 98% erreicht.
Sind Ihre Testdaten dieser Teilmenge sehr ähnlich? Wenn ja, dann müssen Sie mehr Daten sammeln, hoffentlich ein bisschen abwechslungsreicher. Aus der Sicht der Bias-Varianz würde ich sagen, dass Ihre Varianz hoch ist.
quelle
Sie haben zu viele Features (1000) für die Anzahl der Samples, die Sie haben (150). Sie müssen Ihre Stichproben erhöhen oder die Anzahl der Features verringern.
Sie sagen normalerweise Anzahl der Merkmale ^ 2 = Anzahl der benötigten Proben. Sie benötigen also mindestens eine Million Proben.
quelle
Dies kann mit jedem ML-Algorithmus und sogar mit benutzerdefinierten Klassifikatoren geschehen. Probieren Sie verschiedene k-fache Kreuzvalidierungsschemata aus, dh auch zwei- oder zehnfach. Mit höherem k wird erwartet, dass sich der Testfehler verringert.
quelle