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

Читать онлайн.
Название Нейросети: создание и оптимизация будущего
Автор произведения Джеймс Девис
Жанр
Серия
Издательство
Год выпуска 2025
isbn



Скачать книгу

где пространства гиперпараметров могут быть огромными.

      Случайный поиск (Random Search) предлагает альтернативу: вместо систематического перебора он случайным образом выбирает комбинации гиперпараметров для тестирования. Исследования показывают, что случайный поиск часто быстрее находит подходящие значения, особенно если не все гиперпараметры одинаково важны для качества модели. В отличие от сеточного поиска, где каждое значение проверяется независимо от его эффективности, случайный подход позволяет сосредоточиться на более широкой области гиперпараметров, экономя ресурсы и сокращая время вычислений.

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

      Рассмотрим задачу поиска гиперпараметров для логистической регрессии при работе с датасетом `Breast Cancer` из библиотеки `sklearn`. Мы будем искать оптимальные значения для двух гиперпараметров:

      1. `C` – обратная величина коэффициента регуляризации.

      2. Тип регуляризации: `L1` или `L2`.

      Применим три метода: сеточный поиск, случайный поиск и Байесовскую оптимизацию, сравнив их результаты.

      Код с решением

      ```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, GridSearchCV, RandomizedSearchCV

      from sklearn.metrics import accuracy_score

      from skopt import BayesSearchCV

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

      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)

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

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

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

      grid_params = {

      'C': [0.01, 0.1, 1, 10, 100],

      'penalty': ['l1', 'l2']

      }

      grid_search = GridSearchCV(estimator=model, param_grid=grid_params, cv=5, scoring='accuracy')

      grid_search.fit(X_train, y_train)

      grid_best_params = grid_search.best_params_

      grid_best_score = grid_search.best_score_

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

      random_params = {

      'C': np.logspace(-2, 2, 20),

      'penalty': ['l1', 'l2']

      }

      random_search = RandomizedSearchCV(estimator=model, param_distributions=random_params, n_iter=10, cv=5, scoring='accuracy', random_state=42)

      random_search.fit(X_train, y_train)

      random_best_params = random_search.best_params_

      random_best_score = random_search.best_score_

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

      bayes_search = BayesSearchCV(

      estimator=model,

      search_spaces={

      'C': (1e-2, 1e2, 'log-uniform'),

      'penalty': ['l1', 'l2']

      },

      n_iter=20,

      cv=5,

      scoring='accuracy',

      random_state=42

      )

      bayes_search.fit(X_train, y_train)

      bayes_best_params = bayes_search.best_params_

      bayes_best_score = bayes_search.best_score_

      # Оценка на тестовой выборке

      grid_test_accuracy = accuracy_score(y_test, grid_search.best_estimator_.predict(X_test))

      random_test_accuracy = accuracy_score(y_test, random_search.best_estimator_.predict(X_test))

      bayes_test_accuracy