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

Вот шаги, необходимые для выполнения случайного поиска:

  1. Определите набор гиперпараметров и их возможные значения: это то же самое, что и при поиске по сетке.
  2. Определите показатель производительности для оптимизации: он такой же, как и при поиске по сетке.
  3. Определите количество итераций или комбинаций гиперпараметров для выборки: вместо создания сетки всех возможных комбинаций гиперпараметров случайный поиск выбирает фиксированное количество комбинаций гиперпараметров случайным образом из предопределенного диапазона.
  4. Примеры комбинаций гиперпараметров: для каждой итерации случайный поиск произвольно выбирает гиперпараметры из предопределенного диапазона.
  5. Обучите и оцените модель для каждой комбинации гиперпараметров: это то же самое, что и при поиске по сетке.
  6. Выберите наилучшую комбинацию гиперпараметров: это тоже самое, что и при поиске по сетке.

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

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

from sklearn.model_selection import RandomizedSearchCV
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import make_classification
from scipy.stats import randint as sp_randint

# Generate a random dataset
X, y = make_classification(n_samples=1000, n_features=10, random_state=42)

# Define the hyperparameters to search over
param_dist = {
    'n_estimators': sp_randint(100, 1000),
    'max_depth': [None, 5, 10],
    'min_samples_split': sp_randint(2, 10)
}

# Define the model to use
model = RandomForestClassifier(random_state=42)

# Perform random search using 5-fold cross-validation
random_search = RandomizedSearchCV(model, param_distributions=param_dist, n_iter=10, cv=5)

# Fit the random search to the data
random_search.fit(X, y)

# Print the best hyperparameters and their score
print("Best hyperparameters: ", random_search.best_params_)
print("Best score: ", random_search.best_score_)

В этом примере мы используем класс RandomizedSearchCV scikit-learn для выполнения случайного поиска. Сначала мы определяем набор гиперпараметров для поиска с использованием словаря (param_dist). Обратите внимание, что мы используем функцию sp_randint из scipy.stats для генерации случайных целых чисел в пределах указанного диапазона для гиперпараметров n_estimators и min_samples_split.

Затем мы определяем модель для использования (RandomForestClassifier) и создаем экземпляр объекта RandomizedSearchCV с моделью, гиперпараметрами и количеством итераций (n_iter) для выполнения.

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

Обратите внимание, что это всего лишь базовый пример, и вам может потребоваться настроить параметры в соответствии с вашим конкретным вариантом использования.

Чтобы узнать больше о науке о данных, перейдите по ссылке: https://medium.com/@thedatabeast