Линейная регрессия с масштабированием признаков

У меня есть общий вопрос о масштабировании функций в линейной регрессии.

У меня есть набор данных за два года. Данные за первый год для определенного столбца полностью отличаются от данных за второй год. Я предполагаю, что, возможно, были разные атрибуты, связанные с вычислением переменной 1-го года по сравнению со 2-м годом.

Во всяком случае, вот как выглядит набор данных. Я покажу первые 6 рядов каждого года:

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

Когда я хочу спрогнозировать этот набор данных, очевидно, что он будет прогнозировать отрицательные результаты, но на самом деле данные просто каким-то образом были изменены.

Если я применяю масштабирование объектов как таковое, как мне вернуться к исходному набору данных, чтобы сделать прогноз?

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

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

person nak5120    schedule 26.07.2017    source источник
comment
Вам нужно будет сохранить минимум и максимум, чтобы иметь возможность преобразовать результат обратно в исходный масштаб.   -  person ekstroem    schedule 26.07.2017
comment
Будет ли тогда ответ: Predicted_Original_Scaled_Number = Predicted_Feature_Scaled_Number * (Max_Original - Min_Original) + Min_Original?   -  person nak5120    schedule 26.07.2017
comment
Это точно   -  person ekstroem    schedule 26.07.2017
comment
Потрясающе спасибо. Не могли бы вы поставить это в качестве ответа, чтобы отдать вам должное?   -  person nak5120    schedule 26.07.2017


Ответы (1)


Конечно. С тем же успехом можно поместить это в функцию, хотя вы сами дали ответ.

Этому нужно дать прогнозируемое значение и исходный вектор

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

или если вы вычислили и сохранили минимум и максимум, то

backtransform2 <- function(value, min, max) { value * (max - min) + min }
person ekstroem    schedule 26.07.2017