¿Cómo escalar nuevas observaciones para hacer predicciones cuando el modelo se ajustó con datos escalados?

13

Entiendo el concepto de escalar la matriz de datos para usar en un modelo de regresión lineal. Por ejemplo, en R podrías usar:

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

Mi única pregunta es, para nuevas observaciones para las que quiero predecir los valores de salida, ¿cómo se escalan correctamente? ¿Sería scaled.new <- (new - mean(data)) / std(data)?

SamuelNLP
fuente
1
Para recuperar los valores y = y_esc * sd(y) + mean(y), hazlo , pero supongo que eso alteraría las propiedades del modelo, ¡así que también estoy esperando una respuesta más técnica!
Fernando
No quiero recuperar los valores, quiero saber cómo las nuevas instancias se pueden escalar correctamente de la misma manera. He editado mi pregunta en función de tu comentario.
SamuelNLP

Respuestas:

13

La respuesta corta a su pregunta es sí, esa expresión para scaled.new es correcta (excepto que quería en sdlugar de std).

Vale la pena señalar que la escala tiene argumentos opcionales que podría usar:

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

Además, el objeto devuelto por scale (scaled.data) tiene atributos que contienen el centrado numérico y las escalas utilizadas (si las hay), que podría usar:

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

La ventaja de esto aparece cuando los datos originales tienen más de una columna, por lo que hay que considerar múltiples medios y / o desviaciones estándar.

usuario20637
fuente
Me gustaría que hubiera una manera un poco más fácil de hacer esto, comoscaled.new <- scale(new, use.attrs = scaled.data)
wordsforthewise
@wordsforthewise No sería difícil escribir un contenedor para scale.default para lograrlo. Dudo que R-core le dé alta prioridad.
user20637
Si. Si puedo descubrir cómo contribuir a R-core y encontrar tiempo para hacerlo, podría hacerlo.
wordsforthewise