Кросс-валидация

Сегодня я хочу поделиться своим опытом настройки гиперпараметров моделей машинного обучения с помощью кросс-валидации.

Кросс-валидация
Краткое содержание

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

Самый простой способ - перебирать все возможные комбинации значений гиперпараметров по сетке (grid search). Но это требует много вычислительных ресурсов. Более эффективный подход - использовать кросс-валидацию.

Что такое кросс-валидация

Кросс-валидация (cross-validation, CV) - это техника разбиения данных на K частей (фолдов). Затем на K-1 фолдах модель обучается, а на оставшемся тестируется. Эта процедура повторяется K раз, чтобы каждый фолд побывал в роли тестового. В итоге мы получаем K оценок качества модели, которые усредняются.

Кросс-валидация позволяет более надежно оценить обобщающую способность модели, чем простое разбиение на обучающую и тестовую выборки. При этом данные используются эффективнее, т.к. каждый объект участвует и в обучении, и в тестировании.

Реализация кросс-валидации в Python

Для реализации кросс-валидации удобно использовать готовые инструменты из библиотеки scikit-learn:

from sklearn.model_selection import cross_val_score
from sklearn.ensemble import RandomForestClassifier

# Создаем модель
model = RandomForestClassifier(n_estimators=100, max_depth=20)  

# Считаем метрики с помощью 5-кратной кросс-валидации
cv_scores = cross_val_score(model, X_train, y_train, cv=5, scoring='accuracy')

print("Cross-Validation Scores:", cv_scores)  
print("Mean CV Score:", cv_scores.mean())

Здесь мы используем функцию cross_val_score, которой передаем модель, обучающую выборку (X_train, y_train), количество фолдов (cv=5) и метрику (scoring='accuracy'). На выходе получаем оценки качества на каждом фолде и их среднее.

Настройка гиперпараметров

Теперь, когда мы умеем оценивать качество модели с помощью кросс-валидации, можно заняться настройкой гиперпараметров. Для этого опять же можно использовать готовые инструменты, например GridSearchCV из scikit-learn:

from sklearn.model_selection import GridSearchCV

parameters = {'n_estimators': [50, 100, 200], 
              'max_depth': [5, 10, 20]}

model = RandomForestClassifier()
clf = GridSearchCV(model, parameters, cv=5, scoring='accuracy')
clf.fit(X_train, y_train)

print("Best parameters:", clf.best_params_)  
print("Best score:", clf.best_score_)

Мы задаем сетку значений параметров в словаре parameters, создаем модель и объект GridSearchCV, которому передаем модель, сетку параметров и количество фолдов. После обучения (fit) у GridSearchCV можно посмотреть лучшие найденные параметры (best_params_) и соответствующее им качество (best_score_).

Кросс-валидация - мощный инструмент для оценки качества моделей и настройки гиперпараметров. Она позволяет более эффективно использовать данные и получать более надежные оценки по сравнению с обычным разбиением на обучающую и тестовую выборки. А готовые реализации в библиотеке scikit-learn делают ее использование простым и удобным.

Надеюсь, мой опыт был вам полезен. Пробуйте применять кросс-валидацию в своих проектах, и ваши модели машинного обучения будут становиться только лучше!

Nerd IT 🌀 ML, DS, ANN, GPT
Привет! Меня зовут Семён, я работаю в сфере ML и аналитики данных и пишу в блог nerdit.ru статьи о своем опыте и том, что может пригодиться начинающим в начале их пути изучения больших данных.

Подписаться на новости Nerd IT

Не пропустите последние выпуски. Зарегистрируйтесь сейчас, чтобы получить полный доступ к статьям.
jamie@example.com
Подписаться