Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабы по ОМО 2025 / Baraeva_Elizaveta_lb4.doc
Скачиваний:
0
Добавлен:
09.09.2026
Размер:
814 Кб
Скачать
☆
  1. Решающие деревья:

  1. Проведите классификацию используя решающие деревья, подобрав параметры, при которых получается лучшее обобщение (максимальная глубина/максимальное количество листьев/метрика загрязнения и т.Д.).

Для подбора оптимальных гиперпараметров была импортирована функция GridSearchCV из библиотеки sklearn.model_selection. Сначала создается словарь param_grid с диапазонами значений для максимальной глубины дерева, минимального числа объектов в листе, критерия разделения и максимального числа листьев. Инициализируется базовый классификатор и с помощью функции GridSearchCV ищутся оптимальные параметры. После обучения на тренировочных данных выводится словарь best_params_ с наилучшей найденной комбинацией гиперпараметров. Реализация приведена в Листинге 5.1.1. Результат представлен в Листинге 5.1.2.

Листинг 5.1.1 – Поиск гиперпараметров для решающих деревьев

from sklearn.model_selection import GridSearchCV

from sklearn.tree import DecisionTreeClassifier

param_grid = {

'max_depth': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, None],

'min_samples_leaf': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],

'criterion': ['gini', 'entropy'],

'max_leaf_nodes': [10, 20, 30, 40, 50, None]

}

tree = DecisionTreeClassifier(random_state=42)

grid_search = GridSearchCV(estimator=tree, param_grid=param_grid, cv=5, scoring='accuracy', n_jobs=-1)

grid_search.fit(X_train, y_train)

print(grid_search.best_params_)

Листинг 5.1.2 – Найденные гиперпараметры

{'criterion': 'gini', 'max_depth': 5, 'max_leaf_nodes': 10, 'min_samples_leaf': 3}

Оптимальные гиперпараметры для дерева решений включают: критерий разделения gini, максимальную глубину 5 уровней, ограничение в 10 листов и минимум 3 наблюдения в каждом листе. Эти настройки указывают на умеренно сложную структуру дерева: глубина 5 и 10 листовых узлов предотвращают переобучение, сохраняя при этом достаточную детализацию, а требование 3 наблюдения в листе обеспечивает статистическую значимость решений.

  1. Постройте изображение с границами принятия решения отметив на них точки классов разным цветом. Сделайте выводы о качестве классификации на основе полученного изображения.

Построение аналогично п.2.2. Реализация приведена в Листинге 5.2.1. Диаграмма изображена на Рисунке 5.2.2.

Листинг 5.2.1 – Реализация построения диаграммы рассеяния с границами принятия решений

tree = DecisionTreeClassifier(criterion='gini', max_depth=5, max_leaf_nodes=10, min_samples_leaf=3).fit(X_train, y_train)

x_min, x_max = X_scaled[:, 0].min() - 0.1, X_scaled[:, 0].max() + 0.1

y_min, y_max = X_scaled[:, 1].min() - 0.1, X_scaled[:, 1].max() + 0.1

xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.02), np.arange(y_min, y_max, 0.02))

Z = tree.predict(np.c_[xx.ravel(), yy.ravel()])

Z = Z.reshape(xx.shape)

plt.figure()

plt.contourf(xx, yy, Z, alpha=0.5, cmap=ListedColormap(['#FFAAAA', '#AAFFAA']))

scatter = plt.scatter(X_scaled[:, 0], X_scaled[:, 1], c=y, cmap=ListedColormap(['#FF0000', '#00FF00']), edgecolor="black")

plt.legend(*scatter.legend_elements(), title="Класс")

plt.xlabel("X1")

plt.ylabel("X2")

plt.grid()

plt.show()

Рисунок 5.2.2 – Диаграмма рассеяния с границами принятия решений

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

Соседние файлы в папке Лабы по ОМО 2025