В « Элементах статистического обучения» Хасси и др. Есть полная глава, посвященная классификаторам опорных векторов и SVM (в вашем случае, начальная страница 418 во 2-м издании). Другой хороший урок - « Машины опорных векторов в R » Дэвида Мейера.
ИксTβ+ β0= 0∥ β∥ = 1β02 / ∥ β∥
Из интерактивной справки ksvm()
в пакете kernlab R, но также см. Kernlab - Пакет S4 для методов ядра в R , вот забавный пример:
set.seed(101)
x <- rbind(matrix(rnorm(120),,2),matrix(rnorm(120,mean=3),,2))
y <- matrix(c(rep(1,60),rep(-1,60)))
svp <- ksvm(x,y,type="C-svc")
plot(svp,data=x)
Обратите внимание, что для ясности мы не рассматриваем обучающие и испытательные образцы. Результаты показаны ниже, где затенение цвета помогает визуализировать подходящие значения решения; значения около 0 находятся на границе решения.
Вызов attributes(svp)
дает вам атрибуты, к которым вы можете получить доступ, например,
alpha(svp) # support vectors whose indices may be
# found with alphaindex(svp)
b(svp) # (negative) intercept
Итак, чтобы отобразить границу решения с соответствующим запасом, давайте попробуем следующее (в перемасштабированном пространстве), которое в значительной степени вдохновлено учебником по SVM, который некоторое время назад сделал Жан-Филипп Верт :
plot(scale(x), col=y+2, pch=y+2, xlab="", ylab="")
w <- colSums(coef(svp)[[1]] * x[unlist(alphaindex(svp)),])
b <- b(svp)
abline(b/w[1],-w[2]/w[1])
abline((b+1)/w[1],-w[2]/w[1],lty=2)
abline((b-1)/w[1],-w[2]/w[1],lty=2)
И вот оно: