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

  1. Проведите классификацию методом опорных векторах при различных параметрах ядра: “linear”, “poly” (нужно выбрать степень), “rbf”. Постройте столбчатую диаграмму зависимости точности (Accuracy) от вида ядра. Дальнейшие пункты 4.* выполняйте для лучшего параметра.

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

Листинг 4.1.1 – Реализация построения столбчатой диаграммы точности в зависимости от параметров ядра

from sklearn.svm import SVC

kernels = {

"linear": {"kernel": "linear"},

"poly": {"kernel": "poly", "degree": 3},

"rbf": {"kernel": "rbf"}

}

accuracy_scores = {}

for name, params in kernels.items():

model = SVC(**params).fit(X_train, y_train)

y_pred = model.predict(X_test)

accuracy_scores[name] = accuracy_score(y_test, y_pred)

plt.figure()

plt.bar(accuracy_scores.keys(), accuracy_scores.values())

plt.ylabel('Accuracy')

plt.show()

Рисунок 4.1.2 – Диаграмма точности в зависимости от параметров ядра

Ядро rbf показало наилучшую точность, значит будем использовать его.

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

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

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

svc = SVC(kernel='rbf').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 = svc.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()

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

Классы в основном имеют четкие границы областей. Большинство точек классов расположены в своей цветовой зоне, но не везде. Также как и в KNN небольшое количество точек класса 1 в красной зоне и класса 0 в зеленой зоне. Ошибки классификации может возникнуть из-за мест, где классы сильно перекрываются. В целом rbf-ядро хорошо захватывает сложную форму границы между классами.

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

Расчет значений аналогичен п.2.4. Реализация представлена в Листинге 4.4.1. Результат представлен в Листинге 4.4.2.

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

y_pred = svc.predict(X_test)

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

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

precision recall f1-score support

0 0.9516 0.9833 0.9672 60

1 0.9831 0.9508 0.9667 61

accuracy 0.9669 121

macro avg 0.9673 0.9671 0.9669 121

weighted avg 0.9675 0.9669 0.9669 121

Из результатов можно увидеть, что модель SVM с brf-ядром показывает отличные результаты классификации с общей точностью 96.69%. У класса 0: Precision равный 95.16% показывает, что из всех предсказанных классов 0 верны 95.16%. Recall равный 98.33% показывает, что модель находит 98.33% истинных классов 0. У класса 1: Precision равный 98.31% показывает, что из всех предсказанных классов 1 верны 98.31%. Recall равный 95.08% показывает, что модель находит 95.08% истинных классов 1. Значение F1 для обоих классов стабильно высокое (около 96.7%), что свидетельствует об оптимальном балансе между точностью и полнотой предсказаний. Средние показатели (около 96.7%) полностью соответствуют общей точности, подтверждая согласованную работу модели для всех классов.

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