Biorąc pod uwagę zestaw punktów w przestrzeni dwuwymiarowej, w jaki sposób jedna decyzja projektowa może działać dla SVM?

10

Czy ktoś może mi wyjaśnić, jak należy zaprojektować funkcję decyzyjną SVM? Lub wskaż mi zasób, który omawia konkretny przykład.

EDYTOWAĆ

W poniższym przykładzie widzę, że równanie X2=1.5 oddziela klasy z maksymalnym marginesem. Ale jak dopasować wagi i napisać równania dla hiperpłaszczyzn w następującej formie.

H1:w0+w1x1+w2x21forYi=+1H2:w0+w1x1+w2x21forYi=1.

wprowadź opis zdjęcia tutaj

Staram się, aby podstawowa teoria znalazła się w przestrzeni 2D (ponieważ łatwiej jest ją wyobrazić), zanim zacznę myśleć o wyższych wymiarach.

Opracowałem rozwiązanie tego problemu. Czy ktoś może potwierdzić, czy jest to poprawne?

wektor wagowy to (0, -2), a W_0 to 3

H1:3+0x12x21forYi=+1H2:3+0x12x21forYi=1.
naresh
źródło
Jest to ilustracja z R tutaj , ale czuję, że pytanie jest bardziej na aspekcie algorytmicznego. W takim przypadku pomocne byłoby dodanie nieco więcej szczegółów na temat planowanej aplikacji lub dostępnego zasobu.
chl
@chl Zaktualizowałem pytanie ze szczegółami
naresh

Odpowiedzi:

12

Istnieją co najmniej dwa sposoby motywowania SVM, ale wybiorę tutaj prostszą drogę.

Teraz zapomnij na chwilę o wszystkim, co wiesz o SVM i skup się na problemie. Otrzymujesz zestaw punktów wraz z niektórymi etykietami ( yD={(x1i,x2i,yi)} ), które pochodzą z { 1 , - 1 } . Teraz staramy się znaleźć linię w 2D, tak aby wszystkie punkty z etykietą 1 spadły na jedną stronę linii, a wszystkie punkty z etykietą - 1 spadły na drugą stronę.yi{1,1}11

Przede wszystkim sobie sprawę, że jest linia 2d i w 0 + w 1 x 1 + w 2 x 2 > 0 oznacza "z jednej strony" linii i wagowo 0 + w 1 x 1 + w 2 x 2 < 0 oznacza „drugą stronę” linii.w0+w1x1+w2x2=0w0+w1x1+w2x2>0w0+w1x1+w2x2<0

Z powyższego możemy wywnioskować, że chcemy jakiegoś wektora takiego, że w 0 + w 1 x i 1 + w 2 x i 20 dla wszystkich punktów x i z y i = 1 oraz w 0 + w 1 x i 1 + w 2 x i 2 < 0[w0,w1,w2]w0+w1x1i+w2x2i0xiyi=1w0+w1x1i+w2x2i<0dla wszystkich punktów z Y i = - 1 [1].xiyi=1

Załóżmy, że taka linia faktycznie istnieje, wtedy mogę zdefiniować klasyfikator w następujący sposób:

min|w0|+|w1|+|w2|subject to:w0+w1x1i+w2x2i0,xi with yi=1w0+w1x1i+w2x2i<0,xi with yi=1

Użyłem powyżej dowolnej funkcji celu, w tej chwili nie obchodzi nas, która funkcja celu jest używana. Chcemy tylko które spełnia nasze ograniczenia. Ponieważ założyliśmy, że istnieje linia, dzięki której możemy oddzielić dwie klasy tą linią, znajdziemy rozwiązanie powyższego problemu optymalizacji.w

Powyższe nie jest SVM, ale da ci klasyfikator :-). Jednak ten klasyfikator może nie być bardzo dobry. Ale jak zdefiniować dobrego klasyfikatora? Dobry klasyfikator to zwykle taki, który dobrze spisuje się na zestawie testowym. Najlepiej, by przejść przez wszystkie możliwe , jakoby rozdzielić dane treningowe i zobaczyć, który z nich ma również na danych testowych. Są jednak nieskończone w , więc jest to całkiem beznadziejne. Zamiast tego rozważymy pewne heurystyki, aby zdefiniować dobry klasyfikator. Jedna heurystyka polega na tym, że linia oddzielająca dane będzie wystarczająco daleko od wszystkich punktów (tj. Zawsze będzie przerwa lub margines między punktami a linią). Najlepszy z nich to ten, który ma maksymalny margines. To jest wykorzystywane w SVM.ww

Zamiast nalegać, aby dla wszystkich punktów x i z y i = 1 oraz w 0 + w 1 x i 1 + w 2 x i 2 < 0 dla wszystkich punktów x i w 1 x i 1 + w 2 x i 2w0+w1x1i+w2x2i0xiyi=1w0+w1x1i+w2x2i<0xi z , jeżeli twierdzą, że w 0 +yi=1 dla wszystkich punktów x I z Y i = 1 , a W 0 + w 1 x I 1 + w 2 x i 2- 1 dla wszystkich punktów x I z Y i = - 1w0+w1x1i+w2x2i1xiyi=1w0+w1x1i+w2x2i1xiyi=1, to tak naprawdę nalegamy, aby punkty były daleko od linii. Margines geometryczny odpowiadający temu wymaganiu wynosi .1w2

Otrzymujemy następujący problem optymalizacji,

max1w2subject to:w0+w1x1i+w2x2i1,xi with yi=1w0+w1x1i+w2x2i1,xi with yi=1
Nieco zwięzłą formą pisania jest Jest to w zasadzie podstawowy preparat SVM. Dla zwięzłości pominąłem sporo dyskusji. Mam nadzieję, że w dalszym ciągu udało mi się zrealizować większość tego pomysłu.
minw2subject to:yi(w0+w1x1i+w2x2i)1,i

Skrypt CVX, aby rozwiązać przykładowy problem:

A = [1 2 1; 3 2 1; 2 3 1; 3 3 1; 1 1 1; 2 0 1; 2 1 1; 3 1 1];
b = ones(8, 1);
y = [-1; -1; -1; -1; 1; 1; 1; 1];
Y = repmat(y, 1, 3);
cvx_begin
variable w(3)
minimize norm(w)
subject to
(Y.*A)*w >= b
cvx_end

Dodatek - marża geometryczna

wyi(w0+w1x1+w2x2)1yi(w0+wTx)11

x+wTx++w0=1xwTx+w0=1. Now, the distance between x+ and x will be the shortest when x+x is perpendicular to the hyperplane.

Now, with all the above information we will try to find x+x2 which is the geometric margin.

wTx++w0=1
wTx+w0=1
wT(x+x)=2
|wT(x+x)|=2
w2x+x2=2
x+x2=2w2

[1] It doesn't actually matter which side you choose for 1 and 1. You just have to stay consistent with whatever you choose.

TenaliRaman
źródło
1
@naresh Yeap, solving this is in cvx gave me the exact same solution that you have w=[0,2,3].
TenaliRaman
1
@entropy thanks I have fixed the typo. I will add the geometric margin explanation.
TenaliRaman
1
@entropy I have updated the answer with the geometric margin explanation.
TenaliRaman
1
@entropy wTx is a hyperplane passing through origin. To cover the space of all linear equations you need the bias term. Think of points residing in 2D and let us say that you are trying to find a line that separates these points. However these points all lie in the first quadrant. Now one can arrange these points such that they are separable but not by any line that passes through the origin. However, a line with a proper bias can do it.
TenaliRaman
1
@entropy Having said the above, you might have realized by now that if you properly rotate and shift the points, even a line passing through the origin should be able to separate the classes. However, usually finding this right rotation and shift is not easy, compared to just learning the bias term.
TenaliRaman