Как вы должны разделить свои данные для вашего проекта 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)
Ссылки