Как вы должны разделить свои данные для вашего проекта ML?

Обучающий набор

  • Мы используем этот образец, чтобы подогнать модель
  • Модель машинного обучения видит и извлекает уроки из этих данных.
  • Аналогия: учитель учит студентов решать длинные деления.

Проверочный набор

  • Используется для оценки соответствия модели и настройки гиперпараметров модели.
  • Становится предвзятой оценкой, поскольку модель неоднократно видит эти данные и настраивает модель на основе этих данных.
  • Модель не учится на этих данных
  • Также называется набором для разработки или набором для разработки.
  • Аналогия: преподавание с проведением в классе викторин или домашних заданий для оценки и улучшения понимания учащимися длинных разделов.

Тестовый набор

  • Используется для обеспечения беспристрастной оценки соответствия модели обучающим данным.
  • Укажите золотой стандарт для оценки модели.
  • Он используется только один раз после обучения модели.
  • Используйте это для оценки конкурирующих моделей
  • Часто набор проверки используется в качестве набора тестов, что не является хорошей практикой.
  • Аналогия: учащиеся сдают итоговый оценочный тест в конце семестра по длинным разделам (это вопросы, которых они раньше не видели, но очень похожие на те, которые они научились решать в классе)

Как следует разделить? Какие должны быть пропорции?

Это зависит от

  • Модель, которую вы тренируете
  • Количество образцов, которые у вас есть

Некоторые наблюдения из практики:

  • Если у вас есть несколько гиперпараметров, вы можете использовать небольшой набор проверки (в противном случае — большой набор проверки).
  • Если у вас небольшой набор данных, обычно используется 70 % для обучения/проверки и 30 % для тестирования.
  • Если у вас очень большой набор данных (например, веб-страницы в Интернете) и вы обучаете модель глубокого обучения, обычно требуется 98% обучения, 1% для проверки и 1% для тестирования.

А как насчет разделения обучения/тестирования, которое мы часто делаем, и перекрестной проверки на обучающем наборе?

  • Обычно два набора обучают и тестируют. Затем итеративно разделите набор поездов на два набора для обучения и проверки. Это перекрестная проверка. В 5-кратной перекрестной проверке вы разделяете данные на 4: 1 и выполняете обучение/проверку 5 раз. Обратите внимание, что по-прежнему важно иметь набор тестов для оценки окончательной модели.
  • Перекрестная проверка обычно используется, когда у вас ограниченные данные.
  • Перекрестная проверка также помогает избежать переобучения модели.

Как выглядит псевдокод?

#usually split into 80/20 train/test sets
train, test = split(data)
#tune model hyperparameters
k_fold cross validation on train
param_sets = {combinations of hyperparameters}
skills = []
for each param_set in param_sets:
    skills = []
    for each fold:
        fold_train <- split for modeling training
        fold_val <- split for validation
        fold_model = fit(fold_train, param_set)
        skill_estimate = evaluate(fold_model, fold_val)
        skills.add(skill_estimate)
    avg_skill = avg(skills)
param_set_best = pick the param_set with the highest avg. skill
#evaluate the final model for the comparison with other models
model = fit(train, param_set_best)
skill = evaluate(model, test)

Ссылки