Должен ли я нормализовать свои функции, прежде чем выбросить их в 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 Если вы нормализуетесь, это может улучшить конвергенцию, поэтому у вас будет меньше времени на обучение.

Другие вопросы по тегам