Пошаговое руководство | Серия данных | Эпизод 9.2

Объяснение "Машины нелинейных опорных векторов: эпизод 9.3"

Если какой-либо раздел статьи неясен, подумайте о просмотре этого видео.

О том, как настроить среду программирования, можно узнать в начале:
Эпизод 4.3

Вы можете просмотреть и использовать код и данные, использованные в этом выпуске, здесь: Ссылка

Цель

Изготовить машину с линейным вектором опор, способную классифицировать яблоки и апельсины по весу и размеру.

Импорт и изучение наших данных

import pandas as pd
apples_oranges = pd.read_csv("D:\ProjectData\\apples_and_oranges.csv")
apples_oranges.head()

# create a dictionary to colour classes 
color_dict = dict({'orange':'orange',
                  'apple':'green'})
# scatterplot
plt.title('Sizes and Weights of apples and oranges')
sns.scatterplot(data=apples_oranges, x="Weight", y="Size", hue="Class", palette = color_dict)

Установка машины опорных векторов

# define input data
X = apples_oranges[["Weight", "Size"]]
# define target 
y = apples_oranges.Class
# fitting the support vector machine using a linear kernel
from sklearn import svm
clf = svm.SVC(kernel = 'linear', C=10)
clf.fit(X, y)

Получить параметры гиперплоскости

b = clf.intercept_
w_1 = clf.coef_[0][0]
w_2 = clf.coef_[0][1]
b, w_1, w_2

Поэтому наша гиперплоскость имеет следующее уравнение (округленное до 2dp):

Где

  • 𝑥 ₁ - вес (в граммах)
  • 𝑥 ₂ - размер (см)

Построение линий гиперплоскости и опорного вектора

# plotting the hyperplane and support vector lines
ax = plt.gca()
sns.scatterplot(data=apples_oranges, x="Weight", y="Size", hue="Class", palette = color_dict)
xlim = ax.get_xlim()
ylim = ax.get_ylim()
xx = np.linspace(xlim[0], xlim[1], 30)
yy = np.linspace(ylim[0], ylim[1], 30)
YY, XX = np.meshgrid(yy, xx)
xy = np.vstack([XX.ravel(), YY.ravel()]).T
Z = clf.decision_function(xy).reshape(XX.shape)
ax.contour(XX, YY, Z, colors='k', levels=[-1, 0, 1], alpha=0.5,
           linestyles=['--', '-', '--'])
ax.scatter(clf.support_vectors_[:, 0], clf.support_vectors_[:, 1], s=100,
           linewidth=1, facecolors='none', edgecolors='k')
plt.show()

Позиции опорных векторов можно получить с помощью следующего кода:

# obtain support vectors
clf.support_vectors_

Создание классификации

Теперь мы можем использовать машину опорных векторов для классификации яблок и апельсинов по весу и размеру фруктов.

Например, предположим, что мы записали, что плод имеет вес 70 грамм и размер 4,6 см.

Поместите эту запись в нашу SVM:

clf.predict([[70, 4.6]])

Мы получаем предсказание, что этот фрукт - апельсин. Глядя на график на диаграмме рассеяния выше, мы отмечаем, что запись 70 граммов и размера 4,6 см находится ниже гиперплоскости, следовательно, прогнозируется оранжевый цвет.

Предыдущая серия _______ Следующая серия

Больше контента на plainenglish.io