реклама
Бургер менюБургер меню

Джеймс Дэвис – Нейросети: создание и оптимизация будущего (страница 25)

18

print(f"Best Params: {bayes_best_params}, CV Accuracy: {bayes_best_score:.4f}, Test Accuracy: {bayes_test_accuracy:.4f}")

```

Объяснение подходов и результатов

1. Сеточный поиск:

Перебирает все комбинации параметров ( C ) и регуляризации (( l1, l2 )). Этот метод даёт точный результат, но требует тестирования всех ( 5 times 2 = 10 ) комбинаций, что становится неэффективным при увеличении числа параметров.

2. Случайный поиск:

Проверяет случайные комбинации параметров. В примере использовано ( n=10 ) итераций. Позволяет охватить больше значений ( C ) (логарифмическое пространство), но качество результата зависит от случайности и количества итераций.

3. Байесовская оптимизация:

Использует априорные вероятности для выбора комбинаций. В примере за 20 итераций она находит комбинации эффективнее, чем случайный поиск. Достигает компромисса между точностью и вычислительными затратами.

Ожидаемый результат

Вывод

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

2. Тестирование и валидация:

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

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

Кросс-валидация является эффективным методом для минимизации риска переобучения и получения стабильных оценок качества модели. В наиболее распространённой технике, (k)-кратной кросс-валидации, данные делятся на (k) равных частей. Каждая из них поочерёдно используется как валидационный набор, в то время как остальные служат тренировочным. Средняя производительность по всем итерациям позволяет получить более надёжную оценку качества модели, особенно в случае ограниченных объёмов данных. Такой подход уменьшает влияние случайных выбросов и дисбалансов, которые могут присутствовать при случайном разделении данных.

Использование валидации и тестирования также помогает отслеживать ключевые метрики, такие как точность, полнота или F1-мера, и выявлять, где именно модель нуждается в улучшении. Например, если производительность на тренировочных данных значительно выше, чем на тестовых, это может свидетельствовать о переобучении. Если же точность на валидации существенно ниже, чем на тесте, это может указывать на неправильный подбор гиперпараметров или недостаточную сложность модели. Таким образом, корректное разделение данных и применение кросс-валидации создают основу для построения надёжных и обобщающих моделей.

Давайте рассмотрим пример с использованием логистической регрессии на датасете `Breast Cancer` из библиотеки `sklearn`. Мы сравним результаты модели, обученной с использованием простого разделения на тренировочные и тестовые данные, с результатами, полученными при применении кросс-валидации. В качестве гиперпараметров мы будем использовать регуляризацию ((C)) для логистической регрессии.

Пример с кодом

```python

import numpy as np

from sklearn.datasets import load_breast_cancer

from sklearn.linear_model import LogisticRegression

from sklearn.model_selection import train_test_split, cross_val_score

from sklearn.metrics import accuracy_score

# Загрузка данных

data = load_breast_cancer()

X, y = data.data, data.target

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# Логистическая регрессия с гиперпараметром C

C_values = [0.01, 0.1, 1, 10, 100]

# 1. Обучение с использованием разделения на тренировочные и тестовые данные

best_test_accuracy = 0

best_C_test = None

for C in C_values:

model = LogisticRegression(C=C, solver='liblinear', max_iter=1000)

model.fit(X_train, y_train)

y_pred = model.predict(X_test)

test_accuracy = accuracy_score(y_test, y_pred)

if test_accuracy > best_test_accuracy:

best_test_accuracy = test_accuracy

best_C_test = C

# 2. Обучение с использованием кросс-валидации

best_cv_accuracy = 0

best_C_cv = None

for C in C_values:

model = LogisticRegression(C=C, solver='liblinear', max_iter=1000)

cv_scores = cross_val_score(model, X, y, cv=5, scoring='accuracy')

mean_cv_accuracy = np.mean(cv_scores)

if mean_cv_accuracy > best_cv_accuracy:

best_cv_accuracy = mean_cv_accuracy

best_C_cv = C

# Вывод результатов

print("Best Model Using Train-Test Split:")

print(f"Best C: {best_C_test}, Test Accuracy: {best_test_accuracy:.4f}")

print("\nBest Model Using Cross-Validation:")

print(f"Best C: {best_C_cv}, Cross-Validation Accuracy: {best_cv_accuracy:.4f}")

```

Объяснение кода

1. Разделение на тренировочные и тестовые данные: Мы разделили данные на 70% для тренировки и 30% для теста. Для каждого значения (C) обучаем модель и вычисляем точность на тестовом наборе. Выбираем модель с наилучшей точностью на тесте.

2. Кросс-валидация: Для каждого значения (C) выполняем кросс-валидацию с 5 фолдами, что позволяет более надёжно оценить обобщающую способность модели. Используем среднее значение точности кросс-валидации как метрику для выбора наилучшей модели.

Ожидаемый результат

Объяснение результатов

– Тренировка и тест: Мы видим, что лучший результат на тестовых данных даёт ( C = 1 ), с точностью 0.9708. Однако это значение точности зависит от того, как именно разделены данные на тренировочную и тестовую выборки. Если бы разделение было другим, результат мог бы измениться.

– Кросс-валидация: При использовании кросс-валидации точность на 5 фолдах (средняя точность) оказалась немного ниже – 0.9662. Это связано с тем, что кросс-валидация проверяет модель на разных подмножествах данных, что даёт более надёжную и обобщённую оценку её производительности. Этот метод минимизирует влияние случайности, связанной с выбором тестового набора, и обычно даёт более стабильную оценку.