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

Сначала создается и обучается модель KNN, затем создаются границы графика и область принятия решений. Область принятия решений строится с помощью plt.contourf, а диаграмма с помощью plt.scatter. Добавляется легенда с названиями классов, подписи осей и сетка. Реализация приведена в Листинге 2.2.1. Диаграмма изображена на Рисунке 2.2.2.

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

from matplotlib.colors import ListedColormap

knn = KNeighborsClassifier(n_neighbors=5, weights='uniform').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 = knn.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()

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

Классы в основном имеют четкие границы областей. Наблюдается хорошая кластеризация: точки классов преимущественно расположены в своей цветовой зоне, но не везде. Исключением являются небольшое количество точек класса 1 в красной зоне и класса 0 в зеленой зоне, что может указывать на шум в данных, наложение распределений признаков.

  1. Рассчитайте значения Precision, Recall, f1 для полученных результатов.

Для расчета значений будем использовать функцию classification_report из sklearn.metrics. Реализация представлена в Листинге 2.4.1. Результат представлен в Листинге 2.4.2.

Листинг 2.4.1 – Расчет значений Precision, Recall, F1

from sklearn.metrics import classification_report

y_pred = knn.predict(X_test)

print(classification_report(y_test, y_pred, digits=4))

Листинг 2.4.2 – Результаты расчета

precision recall f1-score support

0 0.9667 0.9667 0.9667 60

1 0.9672 0.9672 0.9672 61

accuracy 0.9669 121

macro avg 0.9669 0.9669 0.9669 121

weighted avg 0.9669 0.9669 0.9669 121

Из результатов можно увидеть, что модель демонстрирует высокую точность с показателем accuracy равным 96.69%. Для обоих классов метрики Precision, Recall и F1-score практически идентичны и составляют около 96.7%, что указывает на сбалансированность модели и отсутствие перекоса в предсказаниях. Высокие значения Recall показывают, что модель правильно находит большинство объектов каждого класса, а близкие значения Precision говорят о минимальном количестве ошибочных предсказаний. Средние значения (macro avg и weighted avg) также находятся на уровне 96.69%, подтверждая сбалансированность модели и стабильность работы алгоритма для всех классов.

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