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

  1. Создайте словарь со значениями гиперпараметров:
  • min_samples_split в диапазоне от 2 до 6 (не включительно);
  • min_samples_leaf в диапазоне от 1 до 6 (не включительно);
  • max_depth в диапазоне от 2 до 6 (не включительно).
  1. Инициализируйте класс GridSearchCV. В качестве значения кросс-валидации укажите 5, также передайте метрику 'roc-auc' и n_jobs=-1.
  2. Запустите поиск гиперпараметров.
# импортируем библиотеки и объявляем константы
import pandas as pd
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.preprocessing import OneHotEncoder
from sklearn.tree import DecisionTreeClassifier
import time

RANDOM_STATE = 42
TEST_SIZE = 0.25

# считываем данные из CSV-файла и задаём id в качестве индексов
df = pd.read_csv('train_satisfaction.csv')
df = df.set_index('id')

# делим данные на входные и целевые
X = df.drop(['Удовлетворён предоставленной услугой'], axis=1)
y = df['Удовлетворён предоставленной услугой']

# делим данные на тренировочные и тестовые
X_train, X_test, y_train, y_test = train_test_split(
    X,
    y,
    test_size=TEST_SIZE,
    random_state=RANDOM_STATE,
    stratify=y)

# создаём список со строковыми категориями для кодирования
cols_ohe = X_train.select_dtypes(include='object').columns.tolist()

# создаём экземпляр класса OneHotEncoder для кодирования
oh_encoder = OneHotEncoder(drop='first', sparse=False)

# обучаем OneHotEncoder на категориальных признаках из тренировочной выборки
oh_encoder.fit(X_train[cols_ohe])

# сохраняем в переменной encoder_col_names список названий новых столбцов
encoder_col_names = oh_encoder.get_feature_names()

# преобразовываем категориальные переменные в тренировочной и тестовой выборках
X_train[encoder_col_names] = oh_encoder.transform(X_train[cols_ohe])
X_test[encoder_col_names] = oh_encoder.transform(X_test[cols_ohe])

# удаляем преобразованные признаки
X_train = X_train.drop(cols_ohe, axis=1)
X_test = X_test.drop(cols_ohe, axis=1)

# запускаем таймер
start = time.time()

# инициализируем модель дерева решений
model = DecisionTreeClassifier(random_state=RANDOM_STATE)

# Создайте словарь с гиперпараметрами:
# - min_samples_split в диапазоне от 2 до 6 (не включительно);
# - min_samples_leaf в диапазоне от 1 до 6 (не включительно);
# - max_depth в диапазоне от 2 до 6 (не включительно).
parameters = {'min_samples_split': range(2, 6),
              'min_samples_leaf': range(1, 6),
              'max_depth': range(2, 6)
             }

# Инициализируйте класс для автоматизированного поиска:
# значение кросс-валидации 5, метрика roc-auc и n_jobs=-1.
gs = GridSearchCV(model,
                  parameters,
                  n_jobs=-1,
                  cv=5,
                  scoring='roc_auc'
                  )

# запустите поиск гиперпараметров
gs.fit(X_train, y_train)

# считаем, сколько секунд прошло с начала запуска
gs_search_time = time.time() - start
print(f'Search time:{gs_search_time}')

# выведите лучшие гиперпараметры
print('Гиперпараметры', gs.best_params_)
# выведите лучшую метрику качества
print('ROC-AUC', gs.best_score_)

Результат
Search time:3.767360210418701
Гиперпараметры {'max_depth': 4, 'min_samples_leaf': 1, 'min_samples_split': 2}
ROC-AUC 0.8967430049890102