Como escalar novas observações para fazer previsões quando o modelo foi ajustado com dados escalados?

13

Entendo o conceito de escalar a matriz de dados para usar em um modelo de regressão linear. Por exemplo, em R você pode usar:

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

Minha única pergunta é, para novas observações para as quais quero prever os valores de saída, como elas são dimensionadas corretamente? Seria scaled.new <- (new - mean(data)) / std(data)?

SamuelNLP
fonte
1
Para recuperar os valores, basta fazer isso y = y_esc * sd(y) + mean(y), mas isso interferiria nas propriedades do modelo, acho, então também estou esperando uma resposta mais técnica!
Fernando
Não quero os valores de volta, quero saber como novas instâncias podem ser dimensionadas corretamente da mesma maneira. Editei minha pergunta com base no seu comentário.
precisa saber é o seguinte

Respostas:

13

A resposta curta para sua pergunta é sim - essa expressão para scaled.new está correta (exceto que você queria, em sdvez destd ).

Pode ser interessante notar que a escala possui argumentos opcionais que você pode usar:

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

Além disso, o objeto retornado pela escala (scaled.data) possui atributos que mantêm a centralização numérica e as escalas usadas (se houver), que você pode usar:

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

A vantagem disso aparece quando os dados originais têm mais de uma coluna; portanto, há várias médias e / ou desvios padrão a serem considerados.

user20637
fonte
Eu gostaria que houvesse uma maneira um pouco mais simples de fazer isso, comoscaled.new <- scale(new, use.attrs = scaled.data)
wordsforthewise
@wordsforthewise Não seria difícil escrever um wrapper para o scale.default para conseguir isso. Duvido que o R-core lhe daria alta prioridade.
user20637
Sim. Se eu puder descobrir como contribuir com o R-core e encontrar tempo para fazê-lo, talvez eu faça isso.
wordsforthewise