Оценка решения внутри train
Кросс-валидация делит train на folds. Для каждого запуска одна часть становится validation, остальные — обучением. Среднее validation-оценок помогает выбирать гиперпараметры с меньшей зависимостью от одного разбиения. Оценки folds не являются полностью независимыми наблюдениями: их train-части пересекаются.В Wine используем StratifiedKFold из пяти частей с перемешиванием и фиксированным seed. Каждый класс должен иметь достаточно объектов для выбранного числа частей. Для временных или групповых данных нужны соответствующие splitters; StratifiedKFold не исправляет зависимость между строками одного объекта.
Поиск параметров
GridSearchCV перебирает заранее заданные варианты, оценивает весь Pipeline на folds и с refit=True обучает лучший вариант на всём train. Параметр шага задаётся через два подчёркивания: model__C. В лаборатории рассматриваем C = 0.1, 1, 10 и scoring="f1_macro".Цена поиска растёт с числом комбинаций, folds и стоимостью обучения. Не запускайте огромную сетку без гипотезы. Зафиксируйте бюджет, кандидатов и метрику до измерения. Если сравниваете много семейств, отбор тоже является частью процесса и способен переобучиться на validation.
Финальная проверка
После выбора один раз измерьте качество на holdout. В отчёте раздельно запишите CV-оценку и test-оценку. Они получены на разных данных и не обязаны совпадать. Низкая test-метрика — информация о процедуре или распределении, а не повод перебирать seed до удачи.В небольшом примере считаем только число folds и пересечение индексов, чтобы проверить механику. Полный поиск реализован в ml_lab.train; откройте его и найдите, что test передаётся только финальному predict, а не search.fit.