Пошаговое руководство | Серия данных | Эпизод 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