2017-07-26 13 views
1

J'ai une question générale sur la mise à l'échelle des fonctions dans la régression linéaire.Régression linéaire avec mise à l'échelle des caractéristiques

J'ai un ensemble de données qui représente deux années de données. La valeur des données de la première année pour une colonne spécifique est complètement différente de celle de la deuxième année. Je suppose qu'il y avait peut-être différents attributs associés au calcul de la variable de la première année par rapport à la deuxième année.

Quoi qu'il en soit, voici à quoi ressemble l'ensemble de données. Je vais montrer les 6 premiers rangs de chaque année:

Date    Col1 
2015-01-01  1500 
2015-01-02  1432 
2015-01-03  1234 
2015-01-04  1324 
2015-01-05  1532 
2015-01-06  1424 
. 
. 
. 
2016-01-01   35 
2016-01-02   31 
2016-01-03   29 
2016-01-04   19 
2016-01-05   22 
2016-01-06   32 

Quand je veux prévoir cet ensemble de données, de toute évidence, il va prévoir les résultats dans la négative, mais en réalité les données vient d'être rééchelonnée d'une certaine façon.

Si j'applique la mise à l'échelle des entités, comment puis-je revenir à mon jeu de données d'origine pour effectuer une prévision?

normalize <- function(x){ 
    return((x-min(x))/(max(x)-min(x))) 
} 

scaled_data <- 
    df %>% 
    group_by(Date %>% 
    mutate(NORMALIZED = normalize(Col1)) 
+2

Vous devez enregistrer le min et max à être capable de transformer le résultat à l'échelle originale. – ekstroem

+0

La réponse serait alors: 'Predicted_Original_Scaled_Number = Predicted_Feature_Scaled_Number * (Max_Original - Min_Original) + Min_Original'? –

+1

C'est exactement ça – ekstroem

Répondre

2

Sûr. Pourrait aussi bien le mettre dans une fonction même si vous avez fourni la réponse vous-même.

Celui-ci doit avoir la valeur prédite et le vecteur d'origine

backtransform <- function(value, x) { value * (max(x) - min(x)) + min(x) } 

ou si vous calculé et maintenu au minimum et maximum puis

backtransform2 <- function(value, min, max) { value * (max - min) + min }