На этом шаге мы рассмотрим общий алгоритм организации такой проверки.
Некоторая часть данных выделяется в контрольный набор. Обучение производится на оставшихся данных, а оценка качества - на контрольных. Как уже говорилось на предыдущих шагах, для предотвращения утечек информации модель не должна настраиваться по результатам прогнозирования на контрольных данных, поэтому требуется также зарезервировать отдельный проверочный набор.
Схематически проверка с простым расщеплением выборки выглядит, как показано на рисунке 1.
Рис.1. Деление данных при использовании проверки с простым расщеплением выборки
В примере 5.5 демонстрируется простейшая реализация этого приема.
num_validation_samples = 10000 # Перемешивание данных нередко весьма желательно np.random.shuffle(data) # Формирование проверочной выборки validation_data = data[:num_validation_samples] # Формирование обучающей выборки training_data = data[num_validation_samples:] # Обучение модели на обучающих и оценка на проверочных данных model = get_model() model.fit(training_data, ...) validation_score = model.evaluate(validation_data, ...) # В этой точке можно выполнить корректировку модели, # повторно обучить ее, оценить и снова скорректировать ... # После настройки гиперпараметров часто желательно выполнить # обучение окончательной модели на всех данных, # не включенных в контрольный набор model.fit(np.concatenate([training_data, validation_data]), ...) test_score = model.evaluate(test_data, ...)
Настоящий протокол оценки самый простой, но он страдает одним существенным недостатком: при небольшом объеме доступных данных проверочная и контрольная выборки могут содержать слишком мало образцов, чтобы считаться статистически репрезентативными. Это легко заметить: если разные случайные перестановки данных перед расщеплением дают сильно отличающиеся оценки качества модели, значит, вы столкнулись именно с такой проблемой. Для ее преодоления были разработаны два других подхода - перекрестная проверка по K блокам и итерационная проверка по K блокам с перемешиванием. Обсудим их в следующих шагах.
На следующем шаге мы рассмотрим перекрестную проверку по K блокам.