Как правильно использовать стандартизацию / нормализацию в сочетании с перекрестной проверкой K-Fold?

Я всегда знал, что стандартизация или нормализация должны подходить только к обучающему набору, а затем использоваться для преобразования набора тестов. Итак, что бы я сделал:

scaler = StandardScaler()
scaler.fit_transform(X_train)
scaler.transform(X_test)

Теперь, если бы я использовал эту модель для новых данных, я мог бы просто сохранить "масштабатор" и загрузить его в любой новый скрипт.

У меня проблемы с пониманием того, как это работает для K-кратного резюме. Лучше ли переоборудовать и преобразовывать скейлер при каждой складке? Я мог понять, как это работает при построении модели, но что, если я захочу использовать эту модель позже. Какой скейлер лучше сохранить?

Далее я хочу распространить это на данные временных рядов. Я понимаю, как k-fold работает для временных рядов, но опять же, как мне совместить это с CV? В этом случае я бы предложил сохранить самый последний скейлер, так как он будет соответствовать 4/5 (в случае k=5) данных, имея его в соответствии с самыми (последними) данными. Будет ли это правильный подход?

1 ответ

Решение

Лучше ли переоборудовать и преобразовывать скейлер при каждой складке?

Да. Возможно, вы захотите прочитать документ scikit-learn о перекрестной проверке:

Так же, как важно протестировать предсказатель на данных, полученных в результате обучения, предварительная обработка (например, стандартизация, выбор функций и т. Д.) И аналогичные преобразования данных аналогичным образом должны быть изучены из обучающего набора и применены к удерживаемым данным для прогнозирования..

Какой скейлер лучше сохранить?

Сохраните масштабатор (и любую другую предварительную обработку, то есть конвейер) и предсказатель, обученный на всех ваших обучающих данных, а не только (k-1)/k их, от перекрестной проверки или 70% от одного разделения.

  • Если вы используете регрессионную модель, все очень просто.

  • Если для обучения вашей модели требуется поиск гиперпараметров с использованием перекрестной проверки (например, поиск по сетке для параметров обучения xgboost), значит, вы уже собрали информацию из разных складок, поэтому вам нужен другой набор тестов для оценки истинной производительности модели вне выборки. (После того, как вы сделали эту оценку, вы можете еще раз переучиться на комбинированных данных поезд + тест. Этот последний шаг не всегда выполняется для нейронных сетей, которые параметризованы для определенного размера выборки.)

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