Должен ли я нормализовать свои функции, прежде чем выбросить их в RNN?
Я играю несколько демонстраций о текущей нейронной сети.
Я заметил, что масштаб моих данных в каждом столбце сильно отличается. Поэтому я собираюсь выполнить некоторую предварительную обработку, прежде чем отправлять пакеты данных в мой RNN. Столбец закрытия - это цель, которую я хочу прогнозировать в будущем.
open high low volume price_change p_change ma5 ma10 \
0 20.64 20.64 20.37 163623.62 -0.08 -0.39 20.772 20.721
1 20.92 20.92 20.60 218505.95 -0.30 -1.43 20.780 20.718
2 21.00 21.15 20.72 269101.41 -0.08 -0.38 20.812 20.755
3 20.70 21.57 20.70 645855.38 0.32 1.55 20.782 20.788
4 20.60 20.70 20.20 458860.16 0.10 0.48 20.694 20.806
ma20 v_ma5 v_ma10 v_ma20 close
0 20.954 351189.30 388345.91 394078.37 20.56
1 20.990 373384.46 403747.59 411728.38 20.64
2 21.022 392464.55 405000.55 426124.42 20.94
3 21.054 445386.85 403945.59 473166.37 21.02
4 21.038 486615.13 378825.52 461835.35 20.70
Мой вопрос заключается в том, необходима ли в моем случае предварительная обработка данных, скажем, StandardScaler в sklearn? И почему?
(Вы можете редактировать мой вопрос)
3 ответа
Будет полезно нормализовать ваши тренировочные данные. Наличие разных функций с разными масштабами, подаваемыми в вашу модель, приведет к тому, что сеть будет взвешивать функции не одинаково. Это может привести к ошибочной расстановке приоритетов одних функций над другими в представлении.
Несмотря на то что вся дискуссия по предварительной обработке данных является спорной либо когда именно это необходимо и как правильно нормализовать данные для каждой конкретной модели и прикладной области существует общее согласие в Machine Learning, который работает вычитание среднего, а также общую нормализацию шаг предварительной обработки полезен.
В случае вычитания"Среднее" среднее значение каждого отдельного объекта вычитается из данных, которые можно интерпретировать как центрирование данных вокруг источника с геометрической точки зрения. Это верно для каждой размерности.
Нормализация данных после шага среднего вычитания приводит к нормализации размерности данных примерно до того же масштаба. Обратите внимание, что различные функции потеряют все приоритеты друг над другом после этого шага, как указано выше. Если у вас есть веские основания полагать, что различные масштабы ваших функций несут важную информацию, которая может понадобиться сети, чтобы по-настоящему понять базовые шаблоны в вашем наборе данных, то нормализация будет вредной. Стандартный подход заключается в том, чтобы масштабировать входные данные так, чтобы они имели среднее значение 0 и дисперсию 1.
Дальнейшие операции предварительной обработки могут быть полезны в особых случаях, таких как выполнение PCA или отбеливание ваших данных. Посмотрите на удивительные заметки CS231n (Настройка данных и модели) для получения дополнительной справки по этим темам, а также для более подробного объяснения вышеперечисленных тем.
Определенно да. Большинство нейронных сетей лучше всего работают с данными между 0-1 или -1 к 1(зависит от функции вывода). Кроме того, когда некоторые входы выше, чем другие сети "будут думать", что они более важны. Это может сделать обучение очень долгим. Сеть должна сначала снизить вес в этих входах.
Я нашел это https://arxiv.org/abs/1510.01378 Если вы нормализуетесь, это может улучшить конвергенцию, поэтому у вас будет меньше времени на обучение.