- •Загрузка данных:
- •Загрузите данные вашего варианта. Учтите, что метки классов могут быть текстом.
- •Визуализируйте данные при помощи диаграммы рассеяния с выделением различных классов.
- •Оцените сбалансированность классов.
- •Проведите предобработку данных при необходимости.
- •Разделите выборку на обучающую и тестовую. На обучающей проводите обучение модели, на тестовой расчет значений метрик.
- •Постройте изображение с границами принятия решения отметив на них точки классов разным цветом. Сделайте выводы о качестве классификации на основе полученного изображения.
- •Рассчитайте значения Precision, Recall, f1 для полученных результатов.
- •Постройте изображение с границами принятия решения отметив на них точки классов разным цветом. Сделайте выводы о качестве классификации на основе полученного изображения.
- •Рассчитайте значения Precision, Recall, f1 для полученных результатов.
- •Логистическая регрессия:
- •Метод опорных векторов:
- •Постройте изображение с границами принятия решения отметив на них точки классов разным цветом. Сделайте выводы о качестве классификации на основе полученного изображения.
- •Рассчитайте значения Precision, Recall, f1 для полученных результатов.
- •Решающие деревья:
- •Проведите классификацию используя решающие деревья, подобрав параметры, при которых получается лучшее обобщение (максимальная глубина/максимальное количество листьев/метрика загрязнения и т.Д.).
- •Постройте изображение с границами принятия решения отметив на них точки классов разным цветом. Сделайте выводы о качестве классификации на основе полученного изображения.
- •Рассчитайте значения Precision, Recall, f1 для полученных результатов.
- •Визуализируйте полученное дерево решений. Сделайте выводы о правилах в узлах дерева. Сопоставьте их с полученными границами принятия решений.
- •Выбор классификатора:
- •Постройте таблицу с метриками Precision, Recall, для полученных результатов каждым классификатором.
- •Сделайте выводы о том, какие классификаторы лучше всего подходят для вашего набора данных и почему.
Решающие деревья:
Проведите классификацию используя решающие деревья, подобрав параметры, при которых получается лучшее обобщение (максимальная глубина/максимальное количество листьев/метрика загрязнения и т.Д.).
Для подбора оптимальных гиперпараметров была импортирована функция 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 наблюдения в листе обеспечивает статистическую значимость решений.
Постройте изображение с границами принятия решения отметив на них точки классов разным цветом. Сделайте выводы о качестве классификации на основе полученного изображения.
Построение аналогично п.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.
