R / Caret: Zug- und Testsätze vs. Kreuzvalidierung?


9

Dies mag vielleicht eine dumme Frage sein, aber wenn Sie ein Modell mit Caret erstellen und so etwas wie LOOCVoder (noch genauer) verwenden LGOCV, was ist der Vorteil der Aufteilung von Daten in Zug- und Testsätze, wenn dies im Wesentlichen der Kreuzvalidierungsschritt ist macht sowieso?

Ich habe einige der zugehörigen Fragen gelesen und sie schlugen vor, dass einige der Kreuzvalidierungsmethoden (z. B. die hier auf der Caret-Site beschriebenen ) zum Zweck der Merkmalsauswahl dienen . In meinem Fall verwende ich jedoch randomForest( method = "rf") und kernlab( method = svmRadial), die nicht in der Gruppe aufgeführt sind, die versucht, Prädiktoren zu löschen.

Meine Frage ist also, ob ich so etwas verwende cross_val <- trainControl(method = "LGOCV", p = 0.8), ist das nicht dasselbe wie das Training von 80% meiner Daten, das Testen des resultierenden Modells bei den verbleibenden 20% und das wiederholte, um eine Vorstellung davon zu bekommen, wie gut das ist Modell funktioniert?

Wenn ja, müssen meine Daten in Zug- / Testsätze aufgeteilt werden?

PS Ich frage teilweise, während ich Modelle für empirisch generierte DOE-Prototypen durchführe (denken Sie an harte Güter, bei denen wir Eingaben optimieren und dann Testmethoden verwenden, um verschiedene Attribute des Prototyps zu messen).

Daher habe ich keinen großen Datensatz mit vielen überlappenden Prädiktorebenen, aus denen modelliert werden kann. Wir führen häufig einen Versuch an jedem DOE-Punkt von Interesse durch, da die Datengenerierung in diesem Fall teuer ist. Daher möchte ich alle Daten, die ich kann, für ein genaues Modell verwenden, wollte aber hier überprüfen, dass mir nichts Offensichtliches fehlt und ein schlechtes Modell entsteht, indem ich die Dinge nicht aufteile.


Bearbeiten: Als Antwort auf die Frage von @ topepo modelliere ich physikalisch gemessene Attribute einer Verbindung basierend auf der Anpassung der chemischen Eingaben der Formel. Ich kann meine eigentliche Anwendung nicht diskutieren, aber ich werde ein Beispiel ausarbeiten, das auf der Formulierung von Latex-Innenfarben basiert. Ich führe entworfene Experimente durch, bei denen wir 4-5 Chemikalien mischen, vielleicht mit% Feststoffen spielen und eine gewisse Zeit zum Erhitzen der Polymerlösung, um den Polymerisationsgrad einzustellen.

Wir könnten dann Rheologie, Molekulargewicht, Härte der Lackbeschichtung, Wasserbeständigkeit usw. messen.

Wir haben anständige Replikate mehrerer Variablen, aber nur wenige echte Replikate in dem Sinne, dass jede DOE-Ebene genau gleich war. Der Gesamtdatensatz beträgt ~ 80 Beobachtungen und vielleicht sind 4-5 exakte Wiederholungen. Wir haben 15 verschiedene Tests durchgeführt, von denen vielleicht 5-6 für jede einzelne Beobachtung durchgeführt wurden. Einige der Antworten sind für 25-50% der Daten vorhanden.

Von hier aus möchten wir die Auswirkungen unserer 7 Prädiktoren auf die Ausgabeeigenschaften modellieren und dann optimieren, um auf neue Entwurfsbereiche abzuzielen, die am wahrscheinlichsten die gewünschten Eigenschaften ergeben.

(Daher meine Frage HIER . Sobald ich ein trainiertes Modell habe, wäre es schön, das "Gegenteil" zu tun und die gewünschten Antworten einzugeben, um die bestmögliche Schätzung der möglichen Eingangspegel zu erhalten, die als nächstes versucht werden sollen.)


Validierungssatz und Testsatz sind zwei verschiedene Dinge! Siehe stats.stackexchange.com/questions/19048/… und en.wikipedia.org/wiki/Test_set
sashkello

@sashkello Danke dafür. Dies kann wahrscheinlich als Duplikat geschlossen werden, und irgendwie habe ich diese Frage völlig übersehen. Ein fehlendes Bit könnte sein: Wenn ich mit trainiere data_set1, wie betrachte ich den Schritt der LGOCVKreuzvalidierung? Aus meiner Lektüre Ich gehe davon aus 1) caretiteriert durch Tuning - Parameter auf data_set1und dann 2) hält diese params fixierte und 3) erzeugt ein „sub - Modell“ params von # 1 für jede Verwendung von p = 0.8Probe data_set1und Tests Vorhersagen über die restlichen 0,2 bis Teilungsgenauigkeit . Ist das eine vernünftige Zusammenfassung?
Hendy

Ein weiteres fehlendes Bit: Hilft das Auslassen eines Satzes zum Testen überhaupt bei der Modellgenauigkeit? Es hört sich so an, als ob es nur ein unvoreingenommenes Set für zukünftige Tests gibt. Wenn die Daten begrenzt sind und es nicht viele überlappende Entwurfspunkte gibt, ist es dann nicht besser, mit dem vollständigen Satz zu trainieren und mich für eine Genauigkeitsschätzung auf die Kreuzvalidierung zu verlassen?
Hendy

Mit einer besseren Suchstrategie ist dies eine weitere hilfreiche: stats.stackexchange.com/questions/9357/… . Insbesondere dies "Ich würde denken, dass ein begrenzender Faktor hier ist, wie viele Daten Sie haben. Meistens möchten wir die Daten überhaupt nicht in feste Partitionen aufteilen, daher CV." Ich denke, das kommt zu meiner Frage (die wahrscheinlich spezifisch für die begrenzte Natur meiner Daten ist (nur 80 Beobachtungen). Scheint eine Abstimmung für die Nichtaufteilung in diesen Fällen zu sein?
Hendy

Antworten:


7

Meine allgemeinen Gedanken:

Wenn Sie also verschiedene Modelle evaluieren, möchten Sie sie möglicherweise optimieren, verschiedene Arten der Vorverarbeitung usw. ausprobieren, bis Sie das finden, was Sie für ein gutes Modell halten. Resampling kann Ihnen dabei helfen, die richtige Richtung einzuschlagen.

Es besteht jedoch immer noch die Möglichkeit einer Überanpassung, und die Wahrscheinlichkeit, dass dies geschieht, hängt stark davon ab, wie viele Daten (und Prädiktoren) Sie haben. Wenn Sie ein wenig Daten haben, gibt es einige Möglichkeiten, darüber nachzudenken:

  • Verwenden Sie alle Daten für das Training, da jeder Datenpunkt wesentlich zur Leistungsfähigkeit des Modells beiträgt.
  • Legen Sie einen kleinen Testsatz beiseite, um die grobe Fehler aufgrund von Überanpassung endgültig zu überprüfen. Die Wahrscheinlichkeit einer Überanpassung bei einer kleinen Stichprobengröße ist nicht gering und wird mit der Anzahl der Stichproben größer.

Ich falle in das zweite Lager, aber das erste ist überhaupt nicht falsch.

Wenn Sie eine Menge Daten haben, ist das nicht wirklich wichtig (es sei denn, Sie haben eine kleine Ereignisrate).

Für Sie:

Du hast ein DOE. Die Art des Designs würde helfen, die Frage zu beantworten. Versuchen Sie, zwischen Entwurfspunkten zu interpolieren oder Entwurfspunkte vorherzusagen, die bisher noch nicht getestet wurden?

Sie haben ein Replikat. Ich bin gefallen, als würde ein zufälliger Wald mit einem Vorschlaghammer auf einen Nagel schlagen und könnte zu einer Überanpassung führen. Ich würde etwas Glatteres wie ein SVM oder ein (keuchendes) neuronales Netzwerk ausprobieren.

Max


Ich habe oben ein Update für Sie hinzugefügt. Ich hatte ziemlich schöne Kurven (ich denke, das ist subjektiv) mit method = "svmRadial". Ich hoffe, einige andere bewerten zu können, einschließlich method = neuralnet, obwohl ich in früheren Versuchen festgestellt habe, dass das neuronale Netzwerk sehr empfindlich auf `set.seed () reagiert. Kurz gesagt, wir versuchen 1) die Beziehung zwischen Eingaben / Mehrfachantworten besser zu verstehen und 2) den wahrscheinlichsten Entwurfsraum bestmöglich zu erraten, um die gewünschten Eigenschaften zu erzielen, damit wir neue, fokussiertere DOEs im Vergleich zu typischeren ausführen können Expansive / Shotgun-Ansatz in Bezug auf Eingabe Min / Max-Pegel zu versuchen.
Hendy
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.