Результаты обучения

После изучения урока вы сможете:

Главный вопросЕсли изменить глубину дерева, силу регуляризации или скорость обучения, результат может заметно измениться. Но как выбрать настройки честно, а не перебрать варианты до случайно удачного результата на тесте?

1. 1. Параметры и гиперпараметры — разные роли

Параметры — внутренние значения, которые алгоритм оценивает по обучающим данным: веса линейной модели, коэффициенты или пороги дерева. Гиперпараметры задаются до или вокруг обучения и управляют тем, как именно модель будет построена: максимальная глубина дерева, сила регуляризации, число соседей, скорость обучения или число эпох.

Не путайте гиперпараметр с параметром только по названию. Важен источник значения: если оно подбирается оптимизацией по обучающим данным, это параметр; если выбирается экспериментатором или процедурой поиска по валидационному качеству, это гиперпараметр.

2. 2. Что именно настраивает гиперпараметр

Гиперпараметры влияют на доступную модели сложность и на ход оптимизации. Например, большая глубина дерева позволяет строить более детальные правила, но повышает риск подгонки под шум. Регуляризация ограничивает величину коэффициентов и может уменьшить вариативность модели. Слишком сильное ограничение, наоборот, ведёт к недообучению.

У нейронной сети скорость обучения определяет размер шага оптимизатора: слишком большой шаг может мешать сходимости, слишком маленький — замедлять её. Число эпох задаёт длительность обучения, а batch size влияет на характер градиентных обновлений и вычислительную нагрузку.

Пример пространства гиперпараметровКонфигурация: λ = (λ₁, λ₂, …, λₖ)
Параметры — Настройка до обученияПараметры → Обучение → Гиперпараметры → Настройка до обученияПараметрыОбучениеГиперпараметрыНастройка до обучения
Настройка до обучения

3. 3. Пространство поиска должно быть осмысленным

Пространство поиска — набор параметров, допустимых значений и правил их сочетания. Не начинайте с сотен случайных комбинаций. Используйте знания о модели, масштабе данных, метрике и ресурсах. Для глубины дерева разумнее проверить небольшой диапазон целых значений; для силы регуляризации часто удобнее логарифмическая шкала, например от 0.001 до 100.

Некоторые параметры условны: `max_depth` относится к деревьям, а `C` — к определённым моделям SVM и логистической регрессии в scikit-learn. Не следует смешивать несовместимые параметры в одном поиске без отдельных пространств для разных моделей.

4. 4. Стратегии поиска

Ручная настройка полезна для первых диагностических шагов и проверки гипотез. Grid Search перебирает все заданные сочетания; он прозрачен, но быстро становится дорогим. Random Search случайно выбирает комбинации из заданных распределений и часто эффективнее, когда только несколько измерений действительно важны.

Байесовская оптимизация использует результаты предыдущих испытаний, чтобы выбирать перспективные следующие варианты. Она может экономить дорогие запуски, но требует корректной постановки, ограничений и аккуратной оценки. Ни один метод не гарантирует глобально лучшую конфигурацию за конечный бюджет.

Пространство — БюджетПространство → Grid Search → Random Search → БюджетПространствоGrid SearchRandom SearchБюджет
Бюджет

5. 5. Где проводить настройку: train, validation и test

Обучающая выборка используется для подбора параметров модели. Валидационная выборка или кросс-валидация используются для сравнения гиперпараметров. Тестовая выборка остаётся в стороне до финальной оценки выбранного процесса.

Если многократно выбирать настройки по test, решения постепенно адаптируются к нему — он перестаёт быть независимой проверкой. При небольшом наборе данных применяют cross-validation: на каждом разбиении модель обучается на одних фолдах, а качество измеряется на отложенном. При временных и групповых данных схема фолдов должна учитывать их структуру.

Критерий выбораВыбор: λ* = arg minλ CV(λ)
Train — Финальный контрольTrain → Validation → Test → Финальный контрольTrainValidationTestФинальный контроль
Финальный контроль

6. 6. Практика на Python: Pipeline и поиск

Преобразования признаков должны обучаться внутри Pipeline на каждом обучающем фолде. Иначе масштабирование или отбор признаков могут увидеть validation-часть и создать утечку. Ниже — пример RandomizedSearchCV для классификации: scaler и модель объединены в Pipeline, а поиск использует только train и внутреннюю кросс-валидацию.

В примере `C` и `n_neighbors` относятся к разным моделям, поэтому для краткости показан один согласованный pipeline с логистической регрессией. Пространство `C` задаётся логарифмически. Для реального проекта дополнительно зафиксируйте метрику, random_state, число фолдов и вычислительный бюджет.

Пример кода

from scipy.stats import loguniform
from sklearn.datasets import load_breast_cancer
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import RandomizedSearchCV, train_test_split
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler

X, y = load_breast_cancer(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, stratify=y, random_state=42
)

pipeline = Pipeline([
    ("scale", StandardScaler()),
    ("model", LogisticRegression(max_iter=3000))
])

search = RandomizedSearchCV(
    pipeline,
    param_distributions={"model__C": loguniform(1e-3, 1e2)},
    n_iter=20,
    scoring="f1",
    cv=5,
    random_state=42,
    n_jobs=-1,
)
search.fit(X_train, y_train)

print("Best hyperparameters:", search.best_params_)
print("Mean CV F1:", search.best_score_)
print("Final test F1:", search.score(X_test, y_test))

7. 7. Выбор — это компромисс, а не магическое число

Сравнивайте не только среднюю метрику, но и разброс по фолдам, время обучения, размер модели, устойчивость к случайному seed и качество на важных сегментах. Если разница между двумя конфигурациями меньше статистической неопределённости, более простая и дешёвая модель может быть предпочтительнее.

После выбора конфигурации зафиксируйте пространство поиска, версии библиотек, seed, схему разбиения, метрику и лучший набор гиперпараметров. Финальную тестовую оценку выполняйте один раз после завершения выбора. Если затем меняете модель по результату теста, нужен новый независимый тест или новый эксперимент.

Практическое задание

Возьмите учебный набор для классификации. Сначала зафиксируйте метрику и стратифицированное разбиение train/test. На train сравните три значения `C` с помощью 5-fold cross-validation внутри Pipeline. Запишите среднее и стандартное отклонение метрики, время и выбранную конфигурацию. Только после выбора один раз оцените модель на test. Объясните, почему тестовая метрика не участвовала в поиске.

Источники и дополнительное чтение

  1. scikit-learn: Tuning the hyper-parameters of an estimator
  2. scikit-learn: RandomizedSearchCV
  3. scikit-learn: Pipeline and composite estimators
  4. Bergstra & Bengio (2012), Random Search for Hyper-Parameter Optimization
  5. scikit-learn: Cross-validation

Словарь урока

ПараметрВнутреннее значение модели, оцениваемое по обучающим данным.
ГиперпараметрНастройка, управляющая структурой модели или процессом обучения.
Пространство поискаНабор допустимых значений и сочетаний гиперпараметров.
ВалидацияОценка, используемая для выбора модели и настроек.
Grid SearchПеребор всех комбинаций в заданной сетке.
Random SearchСлучайная выборка комбинаций из заданного пространства.
Байесовская оптимизацияПоследовательный поиск, использующий результаты предыдущих испытаний.
Кросс-валидацияПовторная оценка на нескольких разбиениях данных.
PipelineПоследовательность преобразований и модели, обучаемая как единый объект.
Вычислительный бюджетОграничение на время, память или число экспериментов.

Самопроверка

Выберите один ответ. После проверки появится объяснение.

Вопрос 1

Что является параметром линейной модели?

Вопрос 2

Что делает гиперпараметр `max_depth` дерева?

Вопрос 3

Когда обычно применяют валидационную выборку?

Вопрос 4

В чём преимущество Random Search перед Grid Search?

Вопрос 5

Почему нельзя многократно подбирать модель по test?

Вопрос 6

Зачем помещать scaler внутрь Pipeline при cross-validation?

Вопрос 7

Если две конфигурации имеют почти одинаковое качество, что ещё важно сравнить?

Вопрос 8

Следует ли выбирать гиперпараметры по финальному тесту?