Wie skaliert man neue Beobachtungen, um Vorhersagen zu treffen, wenn das Modell mit skalierten Daten ausgestattet wurde?

13

Ich verstehe das Konzept der Skalierung der Datenmatrix zur Verwendung in einem linearen Regressionsmodell. In R könnten Sie beispielsweise Folgendes verwenden:

scaled.data <- scale(data, scale=TRUE)

Meine einzige Frage ist, für neue Beobachtungen, für die ich die Ausgabewerte vorhersagen möchte, wie sie richtig skaliert werden. Wäre es scaled.new <- (new - mean(data)) / std(data)?

SamuelNLP
quelle
1
Um die Werte zurückzugewinnen, mache ich einfach y = y_esc * sd(y) + mean(y), aber das würde die Modelleigenschaften durcheinander bringen, also warte ich auch auf eine technischere Antwort!
Fernando
Ich möchte die Werte nicht zurück, ich möchte wissen, wie neue Instanzen auf die gleiche Weise korrekt skaliert werden können. Ich habe meine Frage basierend auf Ihrem Kommentar bearbeitet.
SamuelNLP

Antworten:

13

Die kurze Antwort auf Ihre Frage lautet: Ja - dieser Ausdruck für skaliert.neu ist korrekt (außer Sie wollten sdstatt std).

Es kann erwähnenswert sein, dass die Skala optionale Argumente enthält, die Sie verwenden können:

scaled.new <- scale(new, center = mean(data), scale = sd(data))

Das von scale (scaled.data) zurückgegebene Objekt verfügt auch über Attribute mit den verwendeten numerischen Zentrierungen und Skalierungen (falls vorhanden), die Sie verwenden können:

scaled.new <- scale(new, attr(scaled.data, "scaled:center"), attr(scaled.data, "scaled:scale"))

Der Vorteil davon ergibt sich, wenn die Originaldaten mehr als eine Spalte haben, sodass mehrere Mittelwerte und / oder Standardabweichungen zu berücksichtigen sind.

user20637
quelle
Ich wünschte, es gäbe einen etwas einfacheren Weg, wiescaled.new <- scale(new, use.attrs = scaled.data)
wordsforthewise
@wordsforthewise Es wäre nicht schwer, einen Wrapper für scale.default zu schreiben, um dies zu erreichen. Ich bezweifle, dass R-Core ihm hohe Priorität einräumen würde.
user20637
Ja. Wenn ich herausfinden kann, wie ich zu R-Core beitragen kann, und Zeit dafür finde, könnte ich das tun.
wordsforthewise