Обчислення межі рішення лінійної моделі SVM


19

З огляду на вектори підтримки лінійної SVM, як я можу обчислити рівняння межі рішення?


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

2
Я поки не можу коментувати, але думаю, що у прийнятій відповіді не повинно бути рядком рішення та полями: abline (b / w [2], - w [1] / w [2]) abline ((b + 1) / w [2], - w [1] / w [2], lty = 2) abline ((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 Дякую за ваш проникливий коментар та за час і увагу, які ви взяли для того, щоб зробити його. Я очікую, що це призведе до вдосконаленої відповіді. Я також хотів би приєднатися до Гунг, вітаючи вас на нашому сайті.
whuber

Відповіді:


29

Елементи статистичного навчання , з Гесте і ін., Має повну главу про підтримку векторних класифікаторів і SVMs (в вашому випадку, стартова сторінка 418 на 2 - е видання). Ще один хороший підручник - « Підтримка векторних машин в R» , Девід Мейер.

Якщо я неправильно зрозумів ваше запитання, межа рішення (або гіперплан) визначається (з та перехоплюючим терміном), або як сказав @ebony лінійна комбінація векторів опори. Тоді маржа становить, слідуючи за Hastie та ін. позначення.xTβ+β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 знаходяться на межі рішення.

alt текст

Виклик 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)

І ось це:

alt текст


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.