Введение
В этом практическом занятии мы научимся использовать методы опорных векторов (SVM) для несбалансированных классов. Сначала мы найдем разделяющую плоскость с помощью простого SVM, а затем построим (пунктирной линией) разделяющую гиперплоскость с автоматической коррекцией для несбалансированных классов. Мы будем использовать функцию make_blobs для создания двух кластеров случайных точек.
Советы по работе с ВМ
После запуска виртуальной машины кликните в левом верхнем углу, чтобы переключиться на вкладку Ноутбук и приступить к практике в Jupyter Notebook.
Иногда вам может потребоваться подождать несколько секунд, пока Jupyter Notebook полностью загрузится. Проверка операций не может быть автоматизирована из-за ограничений Jupyter Notebook.
Если вы столкнетесь с проблемами во время обучения, не стесняйтесь обращаться к Labby. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.
Импорт библиотек
Начнем с импорта необходимых библиотек для практического занятия: matplotlib.pyplot, svm, make_blobs и DecisionBoundaryDisplay.
import matplotlib.pyplot as plt
from sklearn import svm
from sklearn.datasets import make_blobs
from sklearn.inspection import DecisionBoundaryDisplay
Создание данных
Мы создадим два кластера случайных точек с использованием функции make_blobs. Создадим один кластер из 1000 точек и другой из 100 точек. Центры кластеров будут равны [0.0, 0.0] и [2.0, 2.0] соответственно. Параметр clusters_std контролирует стандартное отклонение кластеров.
n_samples_1 = 1000
n_samples_2 = 100
centers = [[0.0, 0.0], [2.0, 2.0]]
clusters_std = [1.5, 0.5]
X, y = make_blobs(
n_samples=[n_samples_1, n_samples_2],
centers=centers,
cluster_std=clusters_std,
random_state=0,
shuffle=False,
)
Настройка модели
Мы настроим модель и получим разделяющую гиперплоскость с использованием функции SVC из библиотеки svm. Будем использовать линейный ядро и установить C равным 1.0.
clf = svm.SVC(kernel="linear", C=1.0)
clf.fit(X, y)
Настройка модели с взвешенными классами
Мы настроим модель и получим разделяющую гиперплоскость с использованием функции SVC из библиотеки svm. Будем использовать линейный ядро и установить class_weight равным {1: 10}. Это даст большее значение меньшему классу.
wclf = svm.SVC(kernel="linear", class_weight={1: 10})
wclf.fit(X, y)
Построение графика для выборки
Мы построим график для выборки с использованием функции scatter из matplotlib.pyplot.
plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.Paired, edgecolors="k")
Построение функций принятия решений для обоих классификаторов
Мы построим графики функций принятия решений для обоих классификаторов с использованием функции DecisionBoundaryDisplay из библиотеки sklearn.inspection. Мы установим plot_method равным "contour", colors равным "k" для простого SVM и "r" для взвешенного SVM, levels равным [0], alpha равным 0.5 и linestyles равным ["-"]. Также установим ax равным plt.gca().
ax = plt.gca()
disp = DecisionBoundaryDisplay.from_estimator(
clf,
X,
plot_method="contour",
colors="k",
levels=[0],
alpha=0.5,
linestyles=["-"],
ax=ax,
)
wdisp = DecisionBoundaryDisplay.from_estimator(
wclf,
X,
plot_method="contour",
colors="r",
levels=[0],
alpha=0.5,
linestyles=["-"],
ax=ax,
)
Добавление легенды
Мы добавим легенду к графику с использованием функции legend из matplotlib.pyplot. Мы установим метки соответственно как "не взвешенный" и "взвешенный".
plt.legend(
[disp.surface_.collections[0], wdisp.surface_.collections[0]],
["non weighted", "weighted"],
loc="upper right",
)
Показать график
Наконец, мы покажем график с использованием функции show из matplotlib.pyplot.
plt.show()
Резюме
В этом практическом занятии мы узнали, как использовать методы опорных векторов (Support Vector Machines, SVM) для несбалансированных классов. Мы использовали функцию make_blobs для создания двух кластеров случайных точек и создали две модели SVM: одну с использованием простого SVM и другую с автоматической коррекцией для несбалансированных классов. Мы построили графики для выборки и функций принятия решений для обоих классификаторов и добавили легенду к графику.