Обычной хорошей практикой в машинном обучении является нормализация характеристик или стандартизация данных переменных предиктора, вот и все, центрируйте данные, вычитая среднее значение, и нормализуйте его, деля на дисперсию (или стандартное отклонение тоже). Для самодостаточности и, насколько я понимаю, мы делаем это для достижения двух основных целей:
- Избегайте сверхмалых весов модели с целью численной устойчивости.
- Обеспечьте быструю конвергенцию алгоритмов оптимизации, таких как, например, Conjugate Gradient, чтобы большая величина одного измерения предиктора относительно других не приводила к медленной конвергенции.
Обычно мы разбиваем данные на наборы для обучения, проверки и тестирования. В литературе мы обычно видим, что для нормализации признаков они принимают среднее значение и дисперсию (или стандартное отклонение) по всему набору переменных-предикторов. Большой недостаток, который я вижу здесь, заключается в том, что если вы это сделаете, вы фактически вводите будущую информацию в обучающие переменные предиктора, а именно будущую информацию, содержащуюся в среднем значении и дисперсии.
Таким образом, я выполняю нормализацию данных тренировки и сохраняю среднее значение и дисперсию. Затем я применяю нормализацию признаков к переменным предиктора наборов данных проверки и тестирования, используя среднее значение и отклонения обучения. Есть ли в этом какие-то принципиальные недостатки? Кто-нибудь может порекомендовать лучшую альтернативу?