понедельник, 20 августа 2018 г.

Тренировочный и тестовый набор: разделение данных

В предыдущем посте было упомянуто о разделении данных на два набора:

  • тренировочный набор - набор для того, чтобы тренировать модель
  • тестовый набор - набор для того, чтобы тестировать модель

Можно изобразить данное разделение следующим образом:

Разделение набора данных на тренировочный и тестовый набор.

Тестовый набор должен соотвествовать следующим требованиям:

  • быть достаточно большим, чтобы результат был статистически достоверным
  • Представлять весь набор данных. Другими словами, тестовый набор не должен набираться по дргуим характеристикам, чем тренировочный набор.

Предположим тестовый набор соответствует этим двум требованиям, наша цель создать модель, которая будет хорошо генерализоваться на новых данных. Тестовый набор служит как заместитель новых данных. Например, рассмотрим следующие графики. Отметим что модель умеренно обучилась по тренировочным данным. Модель не выполняет идеальной работы - некоторые из предсказаний ошибочны. Однако, эта модель так же хороша на тестовых данных, как и на тренировочных. Другими словами, эта простая модель не переобучилась по тренировочным данным.

Проверка тренированной модели на тестовых данных.

Никогда не тренируйте модель на тестовых данных. Если модель неожиданно при использовании дает странные результаты, то это может быть знаком того, что она случайно была тренирована на тестовом наборе. Например, высокая точность может быть индикатором того, что тестовые данные попали в тренировочный набор.

Например, возьмем модель, которая оценивает является ли электронное письмо спамом или нет, используя поле Тема, сообщение в письме, и адрес отправителя как свойства для модели. Разделим данные на тренировочный и тестовый набор в соотношении 80-20. После тренировки модель достигла точности 99% в тренировочном и тестовом наборе. Мы предполагали более низкую точность на тестовом наборе. Взглянув на данные, мы обнаружили, что многие из примеров в тестовом наборе являются копиями примеров тренировочного набора (мы пренебрегли очисткой данных от копий перед разделением данных). Таким образом, получилось так, что мы ненароком тренировали модель на части данных из тестового набора, и в результате не можем оценить насколько хорошо модель генерализуется на новых данных.