Принятие решения о том, как масштабировать данные и какой масштабер использовать? - PullRequest
2 голосов
/ 07 июня 2019

Я пытаюсь обучить модель MLP с двумя плотными слоями в керасах, чтобы сделать прогноз для небольшого набора данных, состоящего примерно из 100 разных временных рядов.Эта модель должна получить значения 6 дней и прогнозировать значение 7 дней.В качестве входных данных для модели я сначала объединяю эти временные ряды друг за другом в кадре данных следующим образом:

 ts1    val1 
 ts1    val2 
   ...     
 ts1    varN 
 ts2    val1 
 ts2    val2 
   ...     
 ts3    varN 
 ts3    val1 
 ts3    val2 
   ...     
 ts3    varN 
   ...
 ts100  val1 
 ts100  val2 
   ...     
 ts100  varN 

Интересно, каков наилучший способ масштабирования этих данных?Прежде всего, следует ли мне масштабировать каждый временной ряд (ts_n) независимо, чтобы в конце было 100 скейлеров?Или мне лучше масштабировать их все вместе (по одному на конце), чтобы не потерять связь между ними?Или, поскольку все эти временные ряды рассматриваются как одна и та же особенность, нет смысла иметь корреляцию ?!

Мой второй вопрос о том, какой метод масштабирования я должен выбрать?min-max или StandardScaler (из склеарна)?Некоторые временные ряды ведут себя совсем не так, как другие, и имеют большие различия в своих значениях.Если я использую шкалу min-max, она будет игнорировать эти различия, верно?Так не лучше ли использовать StandardScaler, который (надеюсь) учитывает различия в баллах между каждым временным рядом?

PS Следует отметить, что «после» масштабирования я создам временные шаги и получуокончательные результаты, как это:

        timestep1 | timestep2 | timestep3 | timestep4 | timestep5 | timestep6 | timestep7
 ts1      var1    |   var2    |   var3    |   var4    |   var5    |   var6    |   var7    
 ts1      var2    |   var3    |   var4    |   var5    |   var6    |   var7    |   var8    
 ts1      var3    |   var4    |   var5    |   var6    |   var7    |   var8    |   var9
 ...
 ts2      var1    |   var2    |   var3    |   var4    |   var5    |   var6    |   var7    
 ts2      var2    |   var3    |   var4    |   var5    |   var6    |   var7    |   var8    
 ts2      var3    |   var4    |   var5    |   var6    |   var7    |   var8    |   var9
 ...
 ts100      var1    |   var2    |   var3    |   var4    |   var5    |   var6    |   var7    
 ts100      var2    |   var3    |   var4    |   var5    |   var6    |   var7    |   var8    
 ts100      var3    |   var4    |   var5    |   var6    |   var7    |   var8    |   var9
 ...

Ответы [ 2 ]

2 голосов
/ 07 июня 2019

В общем, я обнаружил очень небольшую разницу в производительности между MinMaxScaler и StandardScaler.Конечно, поскольку (кажется) вы также будете масштабировать целевую переменную, вам следует убедиться, что вы используете масштабатор, который соответствует вашей функции активации вывода.Например, если вы активируете выходную функцию ReLU, вы не сможете предсказать любые отрицательные значения.В этом случае я бы склонялся к MinMaxScaler, поскольку все ваши цели окажутся в интервале [0,1].

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

Стоит также рассмотреть другие сетевые архитектуры для прогнозирования временных рядов, например RNN.

1 голос
/ 07 июня 2019

вам нужно позаботиться о шкале MinMax, потому что в реальной ситуации ваши прогнозируемые данные могут иметь разную шкалу, другими словами, они могут быть больше, чем самое высокое значение в наборе поездов.

я думаю, чтов этом случае лучше всего использовать стандартную шкалу, потому что мы устанавливаем среднее значение = 0 (или определенное число) и стандартное значение = 0 или 1.

Еще одна вещь, которую вы можете попробовать, это сделать первый уровень сети без активациии последний слой тоже.или relu, если не работают с отрицательными значениями.

...