Maszyna wektorów nośnych

Algorytm klasyfikacji szukający granicy (hiperpłaszczyzny) najlepiej oddzielającej klasy z maksymalnym marginesem. Skuteczny także dla danych o wielu wymiarach.

Maszyna wektorów nośnych (ang. Support Vector Machine, SVM) to algorytm uczenia nadzorowanego, który szuka granicy decyzyjnej — tzw. hiperpłaszczyzny — najlepiej oddzielającej dwie klasy danych. „Najlepiej” znaczy tu: z możliwie największym marginesem, czyli odstępem między granicą a najbliższymi punktami każdej z klas. Te najbliższe punkty to właśnie wektory nośne i to one (a nie cała chmura danych) wyznaczają, gdzie przebiega granica.

Jak to działa

Wyobraź sobie dwie grupy punktów na płaszczyźnie. Linii, które je rozdzielą, jest nieskończenie wiele. SVM wybiera tę jedną, która zostawia najszerszy „pas bez ziemi niczyjej” po obu stronach. Im szerszy margines, tym model lepiej radzi sobie z generalizacją i wykazuje lepszą zdolność generalizacji na nowe dane.

W rzeczywistości dane rzadko da się rozdzielić prostą linią. Tu wchodzi kernel trick: zamiast ręcznie dodawać nowe cechy, SVM przenosi dane do przestrzeni o wyższej liczbie wymiarów, gdzie liniowy podział staje się możliwy. Popularne jądra (kernele) to linear, poly i rbf (radialne). Dzięki temu SVM dobrze radzi sobie z danymi o wielu cechach, np. tekstem zamienionym na wektory.

Przykład z praktyki

Najprostsza droga to scikit-learn w Pythonie. Klasyfikacja sprowadza się do kilku linijek:

from sklearn.svm import SVC

model = SVC(kernel='rbf', C=1.0)

model.fit(X_train, y_train)

Klasyczny scenariusz: filtr spamu albo klasyfikacja recenzji na pozytywne/negatywne. Tekst zamieniasz na wektory (np. TF-IDF), a SVM uczy się granicy między klasami. Przy mniejszych, dobrze opisanych zbiorach często bije bardziej „modne” sieci neuronowe.

Na co uważać

  • Skalowanie cech to obowiązek. SVM jest wrażliwy na zakresy wartości — przepuść dane przez StandardScaler, inaczej cecha o dużych liczbach zdominuje resztę.
  • Parametr C i gamma decydują o przeuczeniu. Za duże C = model wkuwa szum zamiast się uczyć.
  • Mit „SVM tylko dla dwóch klas”. Dla wielu klas biblioteki robią one-vs-rest albo one-vs-one pod spodem — działa, choć trzeba wiedzieć, co liczysz.
  • Skala danych. Przy milionach próbek SVM bywa wolny w treningu — wtedy lepiej spojrzeć w stronę modeli liniowych lub gradient boosting.

Pojęcia powiązane

Warto znać przy okazji: hiperpłaszczyzna, margines, kernel trick, klasyfikacja, regresja (SVM ma też wariant SVR), regularyzacja, overfitting, scikit-learn oraz uczenie nadzorowane jako szersza kategoria.