Классификация данных с использованием опорных векторных машин (SVM) в Python

Опубликовано: 14 Июля, 2021

Введение в SVM:
В машинном обучении вспомогательные векторные машины (SVM, также поддерживающие векторные сети) представляют собой модели обучения с учителем со связанными алгоритмами обучения, которые анализируют данные, используемые для классификации и регрессионного анализа.
Машина опорных векторов (SVM) - это дискриминантный классификатор, формально определяемый разделяющей гиперплоскостью. Другими словами, с учетом помеченных данных обучения (контролируемое обучение) алгоритм выводит оптимальную гиперплоскость, которая классифицирует новые примеры.

Что такое машина опорных векторов?

Модель SVM представляет собой представление примеров в виде точек в пространстве, нанесенных на карту таким образом, что примеры отдельных категорий разделены четким промежутком, который является как можно более широким.
Помимо выполнения линейной классификации, SVM могут эффективно выполнять нелинейную классификацию, неявно отображая свои входные данные в пространственные объекты большой размерности.

Что делает SVM?

По заданному набору обучающих примеров, каждый из которых помечен как принадлежащий к той или иной из двух категорий, алгоритм обучения SVM строит модель, которая присваивает новые примеры той или иной категории, что делает его не вероятностным двоичным линейным классификатором.

Прежде чем продолжить, дайте вам понять основные моменты из этой статьи. Здесь я рассмотрю пример SVM-классификации наборов данных UCI рака с использованием инструментов машинного обучения, то есть scikit-learn, совместимого с Python.
Предварительные требования: Numpy, Pandas, matplot-lib, scikit-learn
Приведем краткий пример классификации опорных векторов. Сначала нам нужно создать набор данных:




# importing scikit learn with make_blobs
from sklearn.datasets.samples_generator import make_blobs
# creating datasets X containing n_samples
# Y containing two classes
X, Y = make_blobs(n_samples = 500 , centers = 2 ,
random_state = 0 , cluster_std = 0.40 )
import matplotlib.pyplot as plt
# plotting scatters
plt.scatter(X[:, 0 ], X[:, 1 ], c = Y, s = 50 , cmap = 'spring' );
plt.show()

Выход:

Что делают машины опорных векторов, так это не только рисуют здесь линию между двумя классами, но и рассматривают область около линии некоторой заданной ширины. Вот пример того, как это может выглядеть:




# creating line space between -1 to 3.5
xfit = np.linspace( - 1 , 3.5 )
# plotting scatter
plt.scatter(X[:, 0 ], X[:, 1 ], c = Y, s = 50 , cmap = 'spring' )
# plot a line between the different sets of data
for m, b, d in [( 1 , 0.65 , 0.33 ), ( 0.5 , 1.6 , 0.55 ), ( - 0.2 , 2.9 , 0.2 )]:
yfit = m * xfit + b
plt.plot(xfit, yfit, '-k' )
plt.fill_between(xfit, yfit - d, yfit + d, edgecolor = 'none' ,
color = '#AAAAAA' , alpha = 0.4 )
plt.xlim( - 1 , 3.5 );
plt.show()

Импорт наборов данных

Это интуиция машин опорных векторов, которые оптимизируют линейную дискриминантную модель, представляющую перпендикулярное расстояние между наборами данных. Теперь давайте обучим классификатор, используя наши обучающие данные. Перед обучением нам необходимо импортировать наборы данных о раке в виде файла csv, в котором мы обучим две функции из всех функций.




# importing required libraries
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# reading csv file and extracting class column to y.
x = pd.read_csv( "C:...cancer.csv" )
a = np.array(x)
y = a[:, 30 ] # classes having 0 and 1
# extracting two features
x = np.column_stack((x.malignant,x.benign))
# 569 samples and 2 features
x.shape
print (x),(y)
[[122,8 1001.]
 [132,9 1326.]
 [130. 1203.]
 ..., 
 [108,3 858,1]
 [140.1 1265.]
 [47.92 181.]]

array ([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
         0., 0., 0., 0., 0., 0., 1., 1., 1., 0., 0., 0., 0.,
         0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0.,
         0., 0., 0., 0., 0., 0., 0., 1., 0., 1., 1., 1., 1.,
         1., 0., 0., 1., 0., 0., 1., 1., 1., 1., 0., 1., ....,
         1.])

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

Теперь мы подгоним машинный классификатор опорных векторов к этим точкам. Хотя математические детали модели правдоподобия интересны, мы позволим прочитать о них в другом месте. Вместо этого мы просто будем рассматривать алгоритм scikit-learn как черный ящик, который выполняет указанную выше задачу.




# import support vector classifier 
# "Support Vector Classifier"
from sklearn.svm import SVC  
clf = SVC(kernel="linear"
  
# fitting x samples and y classes 
clf.fit(x, y) 

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




clf.predict([[ 120 , 990 ]])
clf.predict([[ 85 , 550 ]])
массив ([0.])
массив ([1.])

Давайте посмотрим на график, как это показывает.


Это достигается путем анализа полученных данных и методов предварительной обработки для создания оптимальных гиперплоскостей с использованием функции matplotlib.

Автор статьи - Афзал Ансари . Если вам нравится GeeksforGeeks, и вы хотели бы внести свой вклад, вы также можете написать статью с помощью provide.geeksforgeeks.org или отправить ее по электронной почте на deposit@geeksforgeeks.org. Посмотрите, как ваша статья появляется на главной странице GeeksforGeeks, и помогите другим гикам.

Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по теме, обсужденной выше.

Внимание компьютерщик! Укрепите свои основы с помощью базового курса программирования Python и изучите основы.

Для начала подготовьтесь к собеседованию. Расширьте свои концепции структур данных с помощью курса Python DS. А чтобы начать свое путешествие по машинному обучению, присоединяйтесь к курсу Машинное обучение - базовый уровень.