Comment mettre à l'échelle de nouvelles observations pour faire des prédictions lorsque le modèle a été équipé de données à l'échelle?

13

Je comprends le concept de mise à l'échelle de la matrice de données à utiliser dans un modèle de régression linéaire. Par exemple, dans R, vous pouvez utiliser:

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

Ma seule question est, pour les nouvelles observations pour lesquelles je veux prédire les valeurs de sortie, comment sont-elles correctement mises à l'échelle? Serait-ce scaled.new <- (new - mean(data)) / std(data)?

SamuelNLP
la source
1
Pour récupérer les valeurs y = y_esc * sd(y) + mean(y), faites-le , mais cela dérangerait les propriétés du modèle, je suppose, alors j'attends aussi une réponse plus technique!
Fernando
Je ne veux pas que les valeurs reviennent, je veux savoir comment les nouvelles instances peuvent être correctement mises à l'échelle de la même manière. J'ai modifié ma question en fonction de votre commentaire.
SamuelNLP

Réponses:

13

La réponse courte à votre question est oui - cette expression pour scaled.new est correcte (sauf que vous vouliez sdau lieu de std).

Il peut être utile de noter que l'échelle a des arguments facultatifs que vous pouvez utiliser:

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

De plus, l'objet renvoyé par scale (scaled.data) possède des attributs contenant le centrage numérique et les échelles utilisées (le cas échéant), que vous pouvez utiliser:

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

L'avantage de cela apparaît lorsque les données d'origine ont plus d'une colonne, donc il y a plusieurs moyennes et / ou écarts-types à considérer.

user20637
la source
J'aimerais qu'il y ait un moyen un peu plus simple de le faire, commescaled.new <- scale(new, use.attrs = scaled.data)
mots pour
@wordsforthewise Il ne serait pas difficile d'écrire un wrapper pour scale.default pour y parvenir. Je doute que R-core lui accorde une haute priorité.
user20637
Ouais. Si je peux comprendre comment contribuer à R-core et trouver le temps de le faire, je pourrais le faire.
wordsforhewise