Wie speichern Sie beim Erstellen eines Modells in R die Modellspezifikationen, damit Sie sie für neue Daten wiederverwenden können? Angenommen, ich baue eine logistische Regression auf historischen Daten auf, werde aber erst nächsten Monat neue Beobachtungen machen. Was ist der beste Ansatz?
Dinge, die ich berücksichtigt habe:
- Speichern des Modellobjekts und Laden in einer neuen Sitzung
- Ich weiß, dass einige Modelle mit PMML exportiert werden können, habe aber nichts über den Import von PMML gesehen
Ich versuche einfach, ein Gefühl dafür zu bekommen, was Sie tun, wenn Sie Ihr Modell in einer neuen Sitzung verwenden müssen.
Danke im Voraus.
data
Argumenten bereitstellen ... vorausgesetzt, ich habe Sie richtig verstanden ...Antworten:
Wiederverwendung eines Modells zur Vorhersage neuer Beobachtungen
Wenn das Modell nicht rechenintensiv ist, dokumentiere ich den gesamten Modellierungsprozess in einem R-Skript, das ich bei Bedarf erneut ausführe. Wenn ein zufälliges Element an der Modellanpassung beteiligt ist, stelle ich sicher, dass ein bekannter zufälliger Startwert festgelegt wird.
Wenn die Berechnung des Modells rechenintensiv ist, verwende ich immer noch ein Skript wie oben, speichere jedoch die
save()
Modellobjekte mit into und rda object. Ich neige dann dazu, das Skript so zu ändern, dass wenn das gespeicherte Objekt vorhanden ist, es geladen wird oder wenn nicht, das Modell mithilfe einer einfachenif()...else
Klausel, die um die relevanten Teile des Codes gewickelt ist , neu angepasst wird .Stellen Sie beim Laden Ihres gespeicherten Modellobjekts sicher, dass Sie alle erforderlichen Pakete neu laden. In Ihrem Fall
glm()
müssen jedoch keine zusätzlichen Pakete über R geladen werden, wenn das Logit-Modell über angepasst wurde.Hier ist ein Beispiel:
Wenn ich dies automatisieren möchte, würde ich wahrscheinlich Folgendes in einem Skript tun:
Natürlich würde der Datengenerierungscode durch Code ersetzt, der Ihre tatsächlichen Daten lädt.
Aktualisieren eines zuvor angepassten Modells mit neuen Beobachtungen
Wenn Sie das Modell mithilfe zusätzlicher neuer Beobachtungen anpassen möchten. Dann
update()
ist eine nützliche Funktion. Es wird lediglich das Modell mit einem oder mehreren aktualisierten Modellargumenten angepasst. Wenn Sie neue Beobachtungen in die Daten aufnehmen möchten, die zur Anpassung an das Modell verwendet werden, fügen Sie die neuen Beobachtungen dem an das Argument übergebenen Datenrahmen hinzu'data'
und führen Sie dann die folgenden Schritte aus:Wo
m1
ist die ursprüngliche, gespeicherte Modellanpassung,. ~ .
sind die Modellformeländerungen, was in diesem Fall bedeutet, dass alle vorhandenen Variablen sowohl auf der linken als auch auf der rechten Seite von enthalten sind~
(mit anderen Worten, nehmen Sie keine Änderungen an der Modellformel vor), unddf
ist die Datenrahmen für das ursprüngliche Modell, erweitert um die neu verfügbaren Beobachtungen.Hier ist ein Arbeitsbeispiel:
Andere haben in Kommentaren erwähnt
formula()
, die die Formel aus einem angepassten Modell extrahieren:Wenn die Modellanpassung jedoch zusätzliche Argumente wie
'family'
oder'subset'
Argumente in komplexeren Modellanpassungsfunktionen enthält. Wennupdate()
Methoden für Ihre Modellanpassungsfunktion verfügbar sind (z. B. für viele gängige Anpassungsfunktionenglm()
), bietet dies eine einfachere Möglichkeit zum Aktualisieren einer Modellanpassung als das Extrahieren und Wiederverwenden der Modellformel.Wenn Sie beabsichtigen, die gesamte Modellierung und zukünftige Vorhersage in R durchzuführen, scheint es nicht wirklich sinnvoll zu sein, das Modell über PMML oder ähnliches zu abstrahieren.
quelle
update
von mirWenn Sie denselben Namen für den Datenrahmen und die Variablen verwenden, können Sie (zumindest für
lm()
undglm()
) die Funktionupdate
für das gespeicherte Modell verwenden:Dies ist natürlich ohne Vorbereitung der Daten und so weiter. Es werden nur die festgelegten Modellspezifikationen wiederverwendet. Beachten Sie, dass das neue Modell, wenn Sie die Kontraste in der Zwischenzeit ändern, mit den neuen Kontrasten aktualisiert wird, nicht mit den alten.
Daher ist die Verwendung eines Skripts in den meisten Fällen die bessere Antwort. Man könnte alle Schritte in eine Komfortfunktion aufnehmen, die nur den Datenrahmen übernimmt, sodass Sie das Skript als Quelle verwenden und die Funktion dann für jedes neue Dataset verwenden können. Siehe auch die Antwort von Gavin dazu.
quelle