Maszyny wektorów nośnych (SVM) to potężny algorytm nadzorowanego uczenia się używany do zadań klasyfikacji i regresji. Podstawowym celem SVM jest znalezienie optymalnej hiperpłaszczyzny, która najlepiej oddziela punkty danych różnych klas w przestrzeni wielowymiarowej. Klasyfikacja zbioru cech w SVM jest ściśle powiązana z funkcją decyzyjną, a zwłaszcza z jej znakiem, który odgrywa ważną rolę w określeniu, po której stronie hiperpłaszczyzny przypada dany punkt danych.
Funkcja decyzyjna w SVM
Funkcję decyzyjną dla SVM można wyrazić jako:
gdzie:
- jest wektorem wagi, który określa orientację hiperpłaszczyzny.
- jest wektorem cech klasyfikowanego punktu danych.
- jest terminem odchylenia, który przesuwa hiperpłaszczyznę.
Aby sklasyfikować punkt danych , stosuje się znak funkcji decyzyjnej:
Znak ten określa stronę hiperpłaszczyzny, na której leży punkt danych.
Rola znaku w klasyfikacji
Znak funkcji decyzyjnej () bezpośrednio określa etykietę klasy przypisaną do punktu danych
. Oto jak to działa:
1. Znak pozytywny: Jeśli , znak funkcji decyzyjnej jest dodatni. Oznacza to, że punkt danych
leży po tej stronie hiperpłaszczyzny, w której znajduje się klasa dodatnia. Dlatego,
jest klasyfikowany jako należący do klasy dodatniej (zwykle oznaczany jako +1).
2. Znak ujemny: Jeśli , znak funkcji decyzyjnej jest ujemny. Oznacza to, że punkt danych
leży po tej stronie hiperpłaszczyzny, w której znajduje się klasa ujemna. Stąd,
jest klasyfikowany jako należący do klasy ujemnej (zwykle oznaczany jako -1).
3. Zero: W rzadkich przypadkach, gdy , punkt danych
leży dokładnie na hiperpłaszczyźnie. Ten scenariusz jest teoretycznie możliwy, ale praktycznie rzadki ze względu na ciągły charakter danych o wartościach rzeczywistych.
Interpretacja geometryczna
Interpretacja geometryczna funkcji decyzyjnej jest niezbędna do zrozumienia, w jaki sposób SVM klasyfikują punkty danych. Hiperpłaszczyzna zdefiniowana przez pełni rolę granicy decyzyjnej pomiędzy dwiema klasami. Orientacja i położenie tej hiperpłaszczyzny są określone przez wektor wagi
i termin stronniczości
.
1. Margines: Margines to odległość między hiperpłaszczyzną a najbliższymi punktami danych z każdej klasy. SVM dąży do maksymalizacji tego marginesu, aby zapewnić, że hiperpłaszczyzna nie tylko oddziela klasy, ale robi to z możliwie największą odległością od najbliższych punktów danych. Te najbliższe punkty danych nazywane są wektorami nośnymi.
2. Wektory wsparcia: Wektory wsparcia to punkty danych położone najbliżej hiperpłaszczyzny. Mają kluczowe znaczenie przy określaniu położenia i orientacji hiperpłaszczyzny. Jakakolwiek zmiana położenia tych wektorów nośnych spowodowałaby zmianę hiperpłaszczyzny.
Przykład
Rozważmy prosty przykład, w którym mamy dwuwymiarową przestrzeń cech z punktami danych z dwóch klas. Oznaczmy klasę dodatnią przez +1, a klasę ujemną przez -1. Załóżmy, że wektor wagi i termin stronniczości
.
Dla punktu danych , możemy obliczyć funkcję decyzyjną w następujący sposób:
Ponieważ , znak funkcji decyzyjnej jest dodatni, a zatem punkt danych
zaliczany jest do klasy pozytywnej (+1).
Dla innego punktu danych , obliczamy funkcję decyzyjną jako:
Ponownie, , więc znak jest dodatni, i
zaliczany jest do klasy pozytywnej (+1).
Rozważmy teraz punkt danych :
W tym przypadku, , więc znak jest ujemny, i
zaliczany jest do klasy ujemnej (-1).
Sformułowanie matematyczne
Matematyczne sformułowanie SVM obejmuje rozwiązanie problemu optymalizacyjnego w celu znalezienia optymalnego i
które maksymalizują margines, jednocześnie poprawnie klasyfikując dane szkoleniowe. Problem optymalizacji można wyrazić jako:
gdzie jest etykietą klasy punktu danych
, a ograniczenie zapewnia, że wszystkie punkty danych są poprawnie sklasyfikowane z marginesem co najmniej 1.
Sztuczka jądra
W wielu praktycznych zastosowaniach dane mogą nie być liniowo separowane w oryginalnej przestrzeni cech. Aby rozwiązać ten problem, maszyny SVM można rozszerzyć do klasyfikacji nieliniowej za pomocą sztuczki jądra. Funkcja jądra w sposób dorozumiany odwzorowuje dane na przestrzeń o wyższych wymiarach, w której możliwa jest liniowa separacja. Powszechnie używane funkcje jądra obejmują jądro wielomianowe, jądro radialnej funkcji bazowej (RBF) i jądro sigmoidalne.
Funkcja decyzyjna w z jądra SVM staje się:
gdzie są mnożnikami Lagrange'a uzyskanymi z podwójnej postaci problemu optymalizacji.
Implementacja Pythona
W Pythonie biblioteka `scikit-learn` zapewnia prostą implementację SVM poprzez klasę `SVC`. Poniżej znajduje się przykład użycia `SVC` do klasyfikacji zbioru danych:
python from sklearn import datasets from sklearn.model_selection import train_test_split from sklearn.svm import SVC from sklearn.metrics import accuracy_score # Load the dataset iris = datasets.load_iris() X = iris.data y = iris.target # Select only two classes for binary classification X = X[y != 2] y = y[y != 2] # Split the dataset into training and testing sets X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) # Create an SVM classifier with a linear kernel clf = SVC(kernel='linear') # Train the classifier clf.fit(X_train, y_train) # Predict the class labels for the test set y_pred = clf.predict(X_test) # Calculate the accuracy of the classifier accuracy = accuracy_score(y_test, y_pred) print(f'Accuracy: {accuracy * 100:.2f}%')
W tym przykładzie klasa `SVC` została użyta do utworzenia klasyfikatora SVM z jądrem liniowym. Klasyfikator jest szkolony na zbiorze uczącym, a dokładność oceniana jest na zbiorze testowym. Klasyfikacja zbioru cech w SVM jest zasadniczo zależna od znaku funkcji decyzyjnej . Znak określa, po której stronie hiperpłaszczyzny znajduje się punkt danych, przypisując go w ten sposób do odpowiedniej klasy. Funkcja decyzyjna, proces optymalizacji w celu znalezienia optymalnej hiperpłaszczyzny i potencjalne wykorzystanie funkcji jądra do obsługi nieliniowej separacji to ważne elementy maszyn SVM. Zrozumienie tych aspektów zapewnia kompleksowy obraz działania maszyn SVM i ich zastosowania w różnych zadaniach uczenia maszynowego.
Inne niedawne pytania i odpowiedzi dotyczące EITC/AI/MLP Uczenie Maszynowe z Pythonem:
- W jaki sposób obliczany jest parametr b w regresji liniowej (przecięcie z osią y linii najlepszego dopasowania)?
- Jaką rolę odgrywają wektory wsparcia w definiowaniu granicy decyzyjnej SVM i jak są one identyfikowane podczas procesu uczenia?
- Jakie znaczenie w kontekście optymalizacji SVM mają wektor wag „w” i obciążenie „b” i w jaki sposób są one wyznaczane?
- Jaki jest cel metody „wizualizacji” w implementacji SVM i jak pomaga ona w zrozumieniu wydajności modelu?
- W jaki sposób metoda „przewidywania” w implementacji SVM określa klasyfikację nowego punktu danych?
- Jaki jest główny cel maszyny wektorów nośnych (SVM) w kontekście uczenia maszynowego?
- W jaki sposób można wykorzystać biblioteki takie jak scikit-learn do implementacji klasyfikacji SVM w Pythonie i jakie kluczowe funkcje są z tym związane?
- Wyjaśnij znaczenie ograniczenia (y_i (mathbf{x}_i cdot mathbf{w} + b) geq 1) w optymalizacji SVM.
- Jaki jest cel problemu optymalizacji SVM i jak jest on sformułowany matematycznie?
- Jaka jest rola równania hiperpłaszczyzny (mathbf{x} cdot mathbf{w} + b = 0) w kontekście maszyn wektorów nośnych (SVM)?
Zobacz więcej pytań i odpowiedzi w EITC/AI/MLP Machine Learning with Python