Результаты обучения
После изучения урока вы сможете:
- Различать обучаемые параметры модели и гиперпараметры алгоритма.
- Объяснять, как гиперпараметры влияют на сложность, регуляризацию и процесс обучения.
- Формировать разумное пространство поиска с учётом типа модели и масштаба данных.
- Сравнивать ручной поиск, Grid Search и Random Search; понимать роль байесовской оптимизации.
- Настраивать модель по validation или cross-validation, сохраняя test для финальной оценки.
- Учитывать вычислительный бюджет, воспроизводимость и компромисс качества.
1. 1. Параметры и гиперпараметры — разные роли
Параметры — внутренние значения, которые алгоритм оценивает по обучающим данным: веса линейной модели, коэффициенты или пороги дерева. Гиперпараметры задаются до или вокруг обучения и управляют тем, как именно модель будет построена: максимальная глубина дерева, сила регуляризации, число соседей, скорость обучения или число эпох.
Не путайте гиперпараметр с параметром только по названию. Важен источник значения: если оно подбирается оптимизацией по обучающим данным, это параметр; если выбирается экспериментатором или процедурой поиска по валидационному качеству, это гиперпараметр.
2. 2. Что именно настраивает гиперпараметр
Гиперпараметры влияют на доступную модели сложность и на ход оптимизации. Например, большая глубина дерева позволяет строить более детальные правила, но повышает риск подгонки под шум. Регуляризация ограничивает величину коэффициентов и может уменьшить вариативность модели. Слишком сильное ограничение, наоборот, ведёт к недообучению.
У нейронной сети скорость обучения определяет размер шага оптимизатора: слишком большой шаг может мешать сходимости, слишком маленький — замедлять её. Число эпох задаёт длительность обучения, а batch size влияет на характер градиентных обновлений и вычислительную нагрузку.
3. 3. Пространство поиска должно быть осмысленным
Пространство поиска — набор параметров, допустимых значений и правил их сочетания. Не начинайте с сотен случайных комбинаций. Используйте знания о модели, масштабе данных, метрике и ресурсах. Для глубины дерева разумнее проверить небольшой диапазон целых значений; для силы регуляризации часто удобнее логарифмическая шкала, например от 0.001 до 100.
Некоторые параметры условны: `max_depth` относится к деревьям, а `C` — к определённым моделям SVM и логистической регрессии в scikit-learn. Не следует смешивать несовместимые параметры в одном поиске без отдельных пространств для разных моделей.
4. 4. Стратегии поиска
Ручная настройка полезна для первых диагностических шагов и проверки гипотез. Grid Search перебирает все заданные сочетания; он прозрачен, но быстро становится дорогим. Random Search случайно выбирает комбинации из заданных распределений и часто эффективнее, когда только несколько измерений действительно важны.
Байесовская оптимизация использует результаты предыдущих испытаний, чтобы выбирать перспективные следующие варианты. Она может экономить дорогие запуски, но требует корректной постановки, ограничений и аккуратной оценки. Ни один метод не гарантирует глобально лучшую конфигурацию за конечный бюджет.
5. 5. Где проводить настройку: train, validation и test
Обучающая выборка используется для подбора параметров модели. Валидационная выборка или кросс-валидация используются для сравнения гиперпараметров. Тестовая выборка остаётся в стороне до финальной оценки выбранного процесса.
Если многократно выбирать настройки по test, решения постепенно адаптируются к нему — он перестаёт быть независимой проверкой. При небольшом наборе данных применяют cross-validation: на каждом разбиении модель обучается на одних фолдах, а качество измеряется на отложенном. При временных и групповых данных схема фолдов должна учитывать их структуру.
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
Что является параметром линейной модели?
Вопрос 2
Что делает гиперпараметр `max_depth` дерева?
Вопрос 3
Когда обычно применяют валидационную выборку?
Вопрос 4
В чём преимущество Random Search перед Grid Search?
Вопрос 5
Почему нельзя многократно подбирать модель по test?
Вопрос 6
Зачем помещать scaler внутрь Pipeline при cross-validation?
Вопрос 7
Если две конфигурации имеют почти одинаковое качество, что ещё важно сравнить?
Вопрос 8
Следует ли выбирать гиперпараметры по финальному тесту?