Pomóż mi zrozumieć Maszyny wektorowe wsparcia

76

Rozumiem podstawy tego, czym jest cel Maszyn Wektorów Wsparcia w zakresie klasyfikacji zestawu danych wejściowych na kilka różnych klas, ale nie rozumiem niektórych drobiazgowych szczegółów. Po pierwsze, jestem nieco zdezorientowany użyciem Zmiennych Slack. Jaki jest ich cel?

Robię problem z klasyfikacją, w którym zarejestrowałem odczyty ciśnienia z czujników umieszczonych na wkładce buta. Osoba będzie siedzieć, stać i chodzić przez kilka minut, podczas gdy rejestrowane będą dane dotyczące ciśnienia. Chcę wyszkolić klasyfikatora, aby był w stanie ustalić, czy dana osoba siedzi, stoi czy chodzi i jest w stanie to zrobić dla przyszłych danych testowych. Jaki typ klasyfikatora muszę wypróbować? Jaki jest najlepszy sposób wyszkolenia klasyfikatora na podstawie danych, które przechwyciłem? Mam 1000 pozycji do siedzenia, stania i chodzenia (3x1000 = 3000 ogółem) i wszystkie one mają następującą postać wektorów cech. (ciśnienie z czujnika 1, ciśnienie z czujnika 2, ciśnienie z czujnika 3, ciśnienie z czujnika 4)

rohanbk
źródło

Odpowiedzi:

103

Myślę, że próbujesz zacząć od złego końca. To, co należy wiedzieć o używaniu SVM, polega na tym, że ten algorytm znajduje hiperpłaszczyznę w hiperprzestrzeni atrybutów, która najlepiej oddziela dwie klasy, gdzie najlepiej oznacza największy margines między klasami (wiedza o tym, jak to się robi, jest tutaj twoim wrogiem, ponieważ rozmywa cały obraz), co ilustruje takie słynne zdjęcie: alternatywny tekst

Pozostały problemy.
Po pierwsze, co z tymi paskudnymi wartościami odstającymi bezwstydnie w centrum chmury punktów innej klasy?
alternatywny tekst
W tym celu pozwalamy optymalizatorowi pozostawić niektóre próbki błędnie oznakowane, a jednak ukarać każdy z takich przykładów. Aby uniknąć wieloobiektywnej optymalizacji, kary za błędnie oznakowane przypadki są łączone z wielkością marginesu za pomocą dodatkowego parametru C, który kontroluje równowagę między tymi celami.
Następnie czasami problem nie jest po prostu liniowy i nie można znaleźć dobrej hiperpłaszczyzny. Tutaj wprowadzamy sztuczkę jądra - po prostu projektujemy oryginalną, nieliniową przestrzeń na wyższą wymiarowo z pewną nieliniową transformacją, oczywiście określoną przez szereg dodatkowych parametrów, mając nadzieję, że w wynikowej przestrzeni problem będzie odpowiedni dla zwykłego SVM:

alternatywny tekst

Po raz kolejny, z pewną matematyką i widzimy, że całą procedurę transformacji można elegancko ukryć, modyfikując funkcję celu, zastępując iloczyn iloczynu obiektów tak zwaną funkcją jądra.
Wreszcie, to wszystko działa dla 2 klas, a ty masz 3; co z tym zrobić? Tutaj tworzymy 3 klasyfikatory 2-klasowe (siedząca - bez siedzenia, stojąca - bez stania, chodzenia - bez chodzenia), a w klasyfikacji łączymy te z głosowaniem.

Ok, więc problemy wydają się rozwiązane, ale musimy wybrać jądro (tutaj konsultujemy się z naszą intuicją i wybrać RBF) i dopasować co najmniej kilka parametrów (jądro C +). I musimy mieć do tego funkcję celu nadającą bezpieczeństwo, na przykład przybliżenie błędu w wyniku weryfikacji krzyżowej. Więc zostawiamy komputer nad tym pracujący, idziemy na kawę, wracamy i widzimy, że istnieją pewne optymalne parametry. Wspaniały! Teraz zaczynamy zagnieżdżoną weryfikację krzyżową, aby uzyskać przybliżenie błędu i voila.

Ten krótki przepływ pracy jest oczywiście zbyt uproszczony, aby był w pełni poprawny, ale pokazuje powody, dla których myślę, że powinieneś najpierw spróbować z losowym lasem , który jest prawie niezależny od parametrów, natywnie wieloklasowy, zapewnia bezstronne oszacowanie błędów i działa prawie tak dobrze, jak dobrze dopasowane SVM .


źródło
5
(+1) Świetnie, że dodajesz zdjęcia ilustrujące całość!
chl
3
@mbq Ponieważ wydajesz się bardzo kompetentny w SVM, pozwól, że wyjaśnię ci moje wątpliwości: po znalezieniu najlepszej hiperpłaszczyzny oddzielającej, do czego ją wykorzystujemy? Możemy zdefiniować SVM jako metodę, która po pierwsze wybiera najlepszą hiperpłaszczyznę do prawidłowej klasyfikacji punktów danych, a po drugie używa tej hiperpłaszczyzny do przecinania nowych punktów danych w dwóch klasach. Dobrze? (Mam wątpliwości co do drugiej części)
DavideChicco.it
3
@ DavideChicco.it Zasadniczo głównym problemem całego ML jest stworzenie modelu, który niezawodnie przewidzi nowe dane, więc tak.