Последовательные итерации усечения

Machine LearningMachine LearningBeginner
Практиковаться сейчас

This tutorial is from open-source community. Access the source code

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом практическом занятии вы научитесь использовать метод последовательного уменьшения количества кандидатов для итеративного выбора наилучшей комбинации параметров из нескольких кандидатов. Этот метод реализован в классах HalvingGridSearchCV и HalvingRandomSearchCV из библиотеки Scikit-learn. В этом практическом занятии будет использоваться класс HalvingRandomSearchCV.

Советы по использованию ВМ

После запуска ВМ перейдите в левый верхний угол и переключитесь на вкладку Notebook, чтобы приступить к практике в Jupyter Notebook.

Иногда может потребоваться подождать несколько секунд, пока Jupyter Notebook полностью загрузится. Проверка операций не может быть автоматизирована из-за ограничений Jupyter Notebook.

Если вы столкнетесь с проблемами во время обучения, не стесняйтесь обращаться к Labby. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sklearn(("Sklearn")) -.-> sklearn/CoreModelsandAlgorithmsGroup(["Core Models and Algorithms"]) sklearn(("Sklearn")) -.-> sklearn/ModelSelectionandEvaluationGroup(["Model Selection and Evaluation"]) sklearn(("Sklearn")) -.-> sklearn/UtilitiesandDatasetsGroup(["Utilities and Datasets"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn/CoreModelsandAlgorithmsGroup -.-> sklearn/ensemble("Ensemble Methods") sklearn/ModelSelectionandEvaluationGroup -.-> sklearn/model_selection("Model Selection") sklearn/UtilitiesandDatasetsGroup -.-> sklearn/datasets("Datasets") sklearn/UtilitiesandDatasetsGroup -.-> sklearn/experimental("Experimental") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/ensemble -.-> lab-49305{{"Последовательные итерации усечения"}} sklearn/model_selection -.-> lab-49305{{"Последовательные итерации усечения"}} sklearn/datasets -.-> lab-49305{{"Последовательные итерации усечения"}} sklearn/experimental -.-> lab-49305{{"Последовательные итерации усечения"}} ml/sklearn -.-> lab-49305{{"Последовательные итерации усечения"}} end

Импорт необходимых библиотек

В этом практическом занятии будут использоваться следующие библиотеки: pandas, numpy, matplotlib, sklearn.datasets, RandomForestClassifier, randint и HalvingRandomSearchCV. Импортируйте их с помощью следующего кода:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.ensemble import RandomForestClassifier
from scipy.stats import randint
from sklearn.experimental import enable_halving_search_cv
from sklearn.model_selection import HalvingRandomSearchCV

Загрузка набора данных

Функция make_classification из модуля sklearn.datasets используется для генерации набора данных для классификации. Набор данных содержит 400 образцов с 12 признаками. Код для загрузки набора данных выглядит следующим образом:

rng = np.random.RandomState(0)
X, y = datasets.make_classification(n_samples=400, n_features=12, random_state=rng)

Определение пространства параметров

Определите словарь param_dist, который содержит гиперпараметры и их соответствующие значения для поиска. Гиперпараметры: max_depth, max_features, min_samples_split, bootstrap и criterion. Диапазон поиска для max_features и min_samples_split определяется с использованием функции randint из модуля scipy.stats. Код для определения пространства параметров выглядит следующим образом:

param_dist = {
    "max_depth": [3, None],
    "max_features": randint(1, 6),
    "min_samples_split": randint(2, 11),
    "bootstrap": [True, False],
    "criterion": ["gini", "entropy"],
}

Создание объекта последовательного случайного поиска

Создайте объект HalvingRandomSearchCV для поиска по пространству параметров. Объект принимает следующие аргументы:

  • estimator: оцениваемая модель, которую нужно оптимизировать
  • param_distributions: пространство параметров для поиска
  • factor: коэффициент, на который количество кандидатов уменьшается на каждой итерации
  • random_state: случайное состояние, используемое для поиска

Код для создания объекта выглядит следующим образом:

clf = RandomForestClassifier(n_estimators=20, random_state=rng)
rsh = HalvingRandomSearchCV(
    estimator=clf, param_distributions=param_dist, factor=2, random_state=rng
)

Настройка объекта последовательного случайного поиска

Настройте объект HalvingRandomSearchCV на наборе данных с использованием метода fit. Код для настройки объекта выглядит следующим образом:

rsh.fit(X, y)

Анализ результатов

Атрибут cv_results_ объекта поиска содержит результаты поиска. Преобразуйте его в датафрейм pandas с использованием следующего кода:

results = pd.DataFrame(rsh.cv_results_)

Столбец params_str создается путем преобразования столбца params в строку. Удалите дублирующие строки, у которых одинаковые значения params_str и iter:

results["params_str"] = results.params.apply(str)
results.drop_duplicates(subset=("params_str", "iter"), inplace=True)

Затем средние тестовые оценки поворачиваются относительно номера итерации и комбинации параметров с использованием метода pivot:

mean_scores = results.pivot(
    index="iter", columns="params_str", values="mean_test_score"
)

Наконец, постройте график средних тестовых оценок по итерациям с использованием следующего кода:

ax = mean_scores.plot(legend=False, alpha=0.6)

labels = [
    f"iter={i}\nn_samples={rsh.n_resources_[i]}\nn_candidates={rsh.n_candidates_[i]}"
    for i in range(rsh.n_iterations_)
]

ax.set_xticks(range(rsh.n_iterations_))
ax.set_xticklabels(labels, rotation=45, multialignment="left")
ax.set_title("Scores of candidates over iterations")
ax.set_ylabel("mean test score", fontsize=15)
ax.set_xlabel("iterations", fontsize=15)
plt.tight_layout()
plt.show()

Интерпретация результатов

График показывает средние тестовые оценки кандидатов по итерациям. На первой итерации все кандидаты оцениваются с небольшим количеством ресурсов. На второй итерации оцениваются только лучшие половина кандидатов с удвоенным количеством ресурсов. Этот процесс повторяется до последней итерации, на которой остается только 2 кандидата. Лучшим кандидатом является тот, у которого наибольшая средняя тестовая оценка на последней итерации.

Резюме

В этом практическом занятии вы узнали, как использовать метод последовательного усечения для итеративного выбора наилучшей комбинации параметров из нескольких кандидатов. Класс HalvingRandomSearchCV из библиотеки Scikit-learn был использован для реализации метода поиска. Результаты поиска были проанализированы и интерпретированы с использованием графика средних тестовых оценок по итерациям.