Ответ
Типичный диапазон — от 15% до 30% от общего размера датасета. Конкретный выбор зависит от нескольких факторов:
- Размер датасета: Для очень больших наборов данных (миллионы строк) может быть достаточно 5-10%, так как абсолютного числа примеров хватит для надежной оценки. Для маленьких датасетов (несколько тысяч строк) лучше взять 25-30%, чтобы валидационная оценка была стабильной.
- Стратегия валидации: При использовании кросс-валидации (например, 5-fold) каждая тестовая «складка» составляет 20%, что эквивалентно выделению 20% на валидацию.
Практический пример с scikit-learn:
from sklearn.model_selection import train_test_split
from sklearn.datasets import make_classification
# Создаем синтетический датасет
X, y = make_classification(n_samples=10000, n_features=20, random_state=42)
# Стандартное разделение: 80% train, 20% validation
X_train, X_val, y_train, y_val = train_test_split(
X, y,
test_size=0.2, # 20% на валидацию
random_state=42, # Для воспроизводимости
stratify=y # Сохраняем распределение классов в разбиениях
)
print(f"Train size: {X_train.shape[0]}") # 8000
print(f"Validation size: {X_val.shape[0]}") # 2000
Ключевые принципы:
- Разбиение должно быть случайным и стратифицированным (если есть дисбаланс классов).
- Для временных рядов случайное разбиение недопустимо — нужно использовать скользящее окно или разделение по времени.
- Валидационная выборка используется только для оценки и настройки гиперпараметров, на ней модель не обучается.