Вычисление границы решения линейной модели SVM


19

Учитывая векторы поддержки линейного SVM, как я могу вычислить уравнение границы решения?


w = сумма по i (ai ti xi). вам нужно будет минимизировать лагранжиан, чтобы найти значения множителей, ai. Интересно, как у вас есть векторы поддержки? тот же процесс должен также дать вам значение ай.
euphoria83

2
Я пока не могу комментировать, но думаю, что в принятом ответе не должно быть строки решения и полей: abline (b / w [2], - w [1] / w [2]) abline ((b + 1) / w [2], - w [1] / w [2], lty = 2) аблайн ((b-1) / w [2], - w [1] / w [2], lty = 2), поскольку аблайн принимает ввод как перехват и наклон соответственно? wx-b = 0, что подразумевает: w1.x1 + w2.x2 = b, что подразумевает (поскольку x2 - это "y") аблайн (b / w [2], -w [1] / w [2]) Извините это старый пост, но я подумал, что спросить.
Непзе Тайсон

Добро пожаловать на сайт, @Nepze Tyson. Это не ответ на вопрос ОП. Пожалуйста, используйте только поле «Ваш ответ», чтобы предоставить ответы. Если у вас есть собственный вопрос, нажмите [ASK QUESTION]вверху страницы и задайте его там, тогда мы можем помочь вам должным образом. Поскольку вы новичок здесь, вы можете прочитать нашу страницу тура , которая содержит информацию для новых пользователей.
gung - Восстановить Монику

@Nepze Спасибо за ваш проницательный комментарий и за время и внимание, которое вы уделили этому. Я ожидаю, что это приведет к улучшению ответа здесь. Я также хотел бы присоединиться к Gung и приветствовать вас на нашем сайте.
whuber

Ответы:


29

В « Элементах статистического обучения» Хасси и др. Есть полная глава, посвященная классификаторам опорных векторов и 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)

И вот оно:

альтернативный текст


4
Красиво, именно то, что я искал. Две строки: w <- colSums (coef (svp) [[1]] * x [unlist (alphaindex (svp)),]) b <- b (svp) были находкой. Спасибо!
dshin

@chi: может быть интересно взглянуть на мой ответ «как вычислить границу решения SVM»: stats.stackexchange.com/questions/164935/…

4

Это линейная комбинация опорных векторов, где коэффициенты задаются множителями Лагранжа, соответствующими этим опорным векторам.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.