Калькулятор разбиения на train, validation и test
Введите число примеров и доли теста и валидации. Калькулятор даст точные размеры выборок — с округлением, как в scikit-learn, — размеры фолдов для кросс-валидации k-fold на всём, кроме теста, и сколько батчей занимает одна эпоха.
Работает в браузере: всё, что вы вводите, никуда не отправляется.
Как пользоваться
- Введите число примеров.
- Введите доли теста и валидации в процентах (0 — без валидационной выборки).
- Введите число фолдов и размер батча.
- Смотрите размеры выборок, фолдов и число батчей за эпоху.
Формулы
- Тест = ⌈N × доля теста⌉, валидация = ⌈N × доля валидации⌉, обучение = N − тест − валидация
- Пул для кросс-валидации P = N − тест
- Размеры фолдов ⌊P ÷ k⌋ и ⌈P ÷ k⌉; больший размер у P mod k фолдов
- Обучение за раунд = P − размер фолда
- Батчей за эпоху = ⌈обучение ÷ размер батча⌉; в последнем батче — остаток
Пример
1000 примеров, 20 % тест, 10 % валидация, 5 фолдов, батч 32:
- тест 200, валидация 100, обучение 700;
- пул для кросс-валидации: 1000 − 200 = 800, значит, в каждом из 5 фолдов по 160 примеров, а в каждом раунде обучение идёт на 640;
- 700 ÷ 32 = 21,875, поэтому эпоха — это 22 батча, а в последнем 700 − 21 × 32 = 28 примеров.
Советы
- Перемешивайте данные перед разбиением, а для классификации используйте стратифицированное разбиение, чтобы в каждой выборке сохранились доли классов.
- Делите по группам, если примеры связаны — несколько строк на пациента или пользователя, — иначе оценка на тесте выйдет слишком оптимистичной.
- Если последний батч совсем маленький, подумайте о drop_last или о размере батча, на который обучающая выборка делится ровнее.
Частые вопросы
Как округляются размеры выборок?
Как в train_test_split из scikit-learn: тест получает долю с округлением вверх, n_test = ⌈N × доля теста⌉, а обучающая выборка — всё остальное. Валидация округляется вверх так же. Для 1234 примеров и 25 % теста это ⌈308,5⌉ = 309 в тесте и 925 в обучении.
Какого размера фолды при кросс-валидации k-fold?
P примеров делятся на k фолдов по ⌊P ÷ k⌋ или ⌈P ÷ k⌉; как в KFold из scikit-learn, первые P mod k фолдов получают по одному лишнему примеру. 925 примеров на 10 фолдов — это пять фолдов по 93 и пять по 92. В каждом раунде обучение идёт на всех фолдах, кроме одного.
Какие данные идут в кросс-валидацию?
Всё, кроме тестовой выборки: обучающие и валидационные примеры вместе. Тест не трогают до самого конца, а кросс-валидация заменяет одно фиксированное валидационное разбиение.
Какое соотношение выбрать?
80/20 или 70/15/15 — обычная отправная точка для нескольких тысяч примеров. При миллионах примеров на валидацию и тест часто хватает 1–2 %. Для маленьких датасетов кросс-валидация k-fold (k = 5 или 10) использует данные лучше одного разбиения.