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 oddziela klasy z maksymalnym marginesem. Ale jak dopasować wagi i napisać równania dla hiperpłaszczyzn w następującej formie.
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
Odpowiedzi:
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={(xi1,xi2,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} 1 −1
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=0 w0+w1x1+w2x2>0 w0+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 2 ≥ 0 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+w1xi1+w2xi2≥0 xi yi=1 w0+w1xi1+w2xi2<0 dla wszystkich punktów z Y i = - 1 [1].xi yi=−1
Załóżmy, że taka linia faktycznie istnieje, wtedy mogę zdefiniować klasyfikator w następujący sposób:
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.w w
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+w1xi1+w2xi2≥0 xi yi=1 w0+w1xi1+w2xi2<0 xi 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+w1xi1+w2xi2≥1 xi yi=1 w0+w1xi1+w2xi2≤−1 xi yi=−1 , to tak naprawdę nalegamy, aby punkty były daleko od linii. Margines geometryczny odpowiadający temu wymaganiu wynosi .1∥w∥2
Otrzymujemy następujący problem optymalizacji,
Skrypt CVX, aby rozwiązać przykładowy problem:
Dodatek - marża geometryczna
Now, with all the above information we will try to find∥x+−x−∥2 which is the geometric margin.
[1] It doesn't actually matter which side you choose for1 and −1 . You just have to stay consistent with whatever you choose.
źródło