Машинное обучение — машины опорных векторов (практика машинного обучения)

машинное обучение

«Это 12-й день моего участия в ноябрьском испытании обновлений, ознакомьтесь с подробностями события:Вызов последнего обновления 2021 г."

Обзор машин опорных векторов

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

image.png

Мягкий интервал, жесткий интервал и нелинейные SVM

image.png

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

Идея алгоритма машины опорных векторов

Найдите некоторые данные на краю набора (называемом опорным вектором) и используйте эти точки, чтобы найти плоскость (называемую поверхностью решения), чтобы расстояние между опорным вектором и плоскостью было наибольшим.

image.png

Базовые знания о гиперплоскости: Любая гиперплоскость может быть описана следующим линейным уравнением: ?2) (2 означает квадрат), после расширения до ?-мерного пространства расстояние от точки ? = (?1, ?2 … ??) до гиперплоскости ??? + ? = 0 равно: |???+?| / ||?|| |? || =?12+??2?12 + ⋯ ??2(корень результата)

Линейная разделительная векторная машина

В гиперплоскости формула линейной разделимой векторной машины выглядит следующим образом:

图片.pngгде ? - множитель Лагранжа

? =E[m,i=1]??????

E[m,i=1]??*?? =0

Боевая машина с линейным разделимым вектором

После применения линейно разделимого алгоритма к данным визуализируйте его. Реализовано с использованием алгоритма svm в библиотеке sklearn. Набор данных выглядит следующим образом:

image.png

#coding=gbk
import numpy as np
import pylab as pl
from sklearn import svm

def loadDataSet(fileName):
    dataMat = []; labelMat = []
    fr = open(fileName)
    for line in fr.readlines():                                     #逐行读取,滤除空格等
        lineArr = line.strip().split('\t')
        dataMat.append([float(lineArr[0]), float(lineArr[1])])      #添加数据
        labelMat.append(float(lineArr[2]))                          #添加标签
    return dataMat,labelMat
X,Y = loadDataSet('datasets_testSet.txt')

#fit the model
clf = svm.SVC(kernel='linear')
clf.fit(X, Y)

# get the separating hyperplane
w = clf.coef_[0]
a = -w[0]/w[1]
xx = np.linspace(-5, 5)
yy = a*xx - (clf.intercept_[0])/w[1]

# plot the parallels to the separating hyperplane that pass through the support vectors
b = clf.support_vectors_[0]
yy_down = a*xx + (b[1] - a*b[0])
b = clf.support_vectors_[-1]
yy_up = a*xx + (b[1] - a*b[0])

print ("w: ", w)
print ("a: ", a)

# print "xx: ", xx
# print "yy: ", yy
print ("support_vectors_: ", clf.support_vectors_)
print ("clf.coef_: ", clf.coef_)

# switching to the generic n-dimensional parameterization of the hyperplan to the 2D-specific equation
# of a line y=a.x +b: the generic w_0x + w_1y +w_3=0 can be rewritten y = -(w_0/w_1) x + (w_3/w_1)


# plot the line, the points, and the nearest vectors to the plane
pl.plot(xx, yy, 'k-')
pl.plot(xx, yy_down, 'k--')
pl.plot(xx, yy_up, 'k--')

pl.scatter(clf.support_vectors_[:, 0], clf.support_vectors_[:, 1],
          s=80, facecolors='none')
pl.scatter([x[0] for x in X], [x[1] for x in X], c=Y, cmap=pl.cm.Paired)

pl.axis('tight')
pl.show()

Результат выглядит следующим образом:

image.png