Jak skalować nowe obserwacje w celu dokonywania prognoz, gdy model został wyposażony w skalowane dane?

13

Rozumiem pojęcie skalowania macierzy danych do zastosowania w modelu regresji liniowej. Na przykład w R możesz użyć:

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

Moje jedyne pytanie brzmi: w przypadku nowych obserwacji, dla których chcę przewidzieć wartości wyjściowe, w jaki sposób są one odpowiednio skalowane? Czy to by było scaled.new <- (new - mean(data)) / std(data)?

SamuelNLP
źródło
1
Aby odzyskać wartości, po prostu zrób y = y_esc * sd(y) + mean(y), ale myślę, że to zepsułoby właściwości modelu, więc czekam też na bardziej techniczną odpowiedź!
Fernando
Nie chcę wartości z powrotem, chcę wiedzieć, jak nowe wystąpienia mogą być poprawnie skalowane w ten sam sposób. Zredagowałem swoje pytanie na podstawie Twojego komentarza.
SamuelNLP

Odpowiedzi:

13

Krótka odpowiedź na twoje pytanie brzmi: tak - wyrażenie na skalowane. Nowe jest poprawne (z wyjątkiem tego, że chciałeś sdzamiast std).

Warto zauważyć, że skala ma opcjonalne argumenty, których można użyć:

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

Ponadto obiekt zwrócony przez skalę (scaled.data) ma atrybuty przechowujące zastosowane centrowanie numeryczne i zastosowane skalowania (jeśli istnieją), których można użyć:

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

Zaletą tego jest sytuacja, gdy oryginalne dane mają więcej niż jedną kolumnę, więc należy wziąć pod uwagę wiele średnich i / lub standardowych odchyleń.

użytkownik20637
źródło
Szkoda, że nie było nieco prostszy sposób to zrobić, jakscaled.new <- scale(new, use.attrs = scaled.data)
wordsforthewise
@wordsforthewise Nie byłoby trudno napisać opakowanie dla scale.default, aby to osiągnąć. Wątpię, czy R-core dałby mu wysoki priorytet.
user20637,
Tak. Jeśli mogę wymyślić, jak przyczynić się do R-core i znaleźć czas, aby to zrobić, mógłbym to zrobić.
wordsforthewise