Dlaczego podczas korzystania z SVM muszę skalować funkcje?


9

Zgodnie z dokumentacją obiektu StandardScaler w scikit-learn:

Na przykład wiele elementów wykorzystywanych w funkcji celu algorytmu uczenia się (np. Jądro RBF maszyn wektora wektorowego lub regulatory modeli liniowych L1 i L2) zakłada, że ​​wszystkie funkcje są wyśrodkowane wokół 0 i mają wariancję w tej samej kolejności. Jeśli cecha ma wariancję większą o rzędy wielkości niż inne, może zdominować funkcję celu i uniemożliwić estymatorowi uczenie się z innych cech poprawnie, zgodnie z oczekiwaniami.

Przed klasyfikacją powinienem skalować moje funkcje. Czy jest jakiś prosty sposób, aby pokazać, dlaczego powinienem to zrobić? Odniesienia do artykułów naukowych byłyby jeszcze lepsze. Znalazłem już jeden, ale prawdopodobnie jest wiele innych.

Odpowiedzi:


16

Wszystkie metody jądra oparte są na odległości. Funkcja jądra RBF to (używając dla prostota).κ(u,v)=exp(uv2)γ=1

Biorąc pod uwagę 3 wektory cech:

x1=[1000,1,2],x2=[900,1,2],x3=[1050,10,20].

następnie , czyli jest podobno bardziej podobny do niż do .κ(x1,x2)=exp(10000)κ(x1,x3)=exp(2905)x1x3x2

Względne różnice między a: x1

x2[0.1,0,0],x3[0.05,10,10].

Zatem bez skalowania dochodzimy do wniosku, że jest bardziej podobny do niż do , mimo że względne różnice na funkcję między i są znacznie większe niż w i .x1x3x2x1x3x1x2

Innymi słowy, jeśli nie skalujesz wszystkich funkcji do porównywalnych zakresów, funkcje o największym zakresie będą całkowicie dominować w obliczeniach macierzy jądra.

Proste przykłady ilustrujące to można znaleźć w następującym artykule: Praktyczny przewodnik po klasyfikacji wektorów (sekcja 2.2).


warto również omówić regularyzację: skala wag zależy od skali nakładów ...
seanv507

Efektem regularyzacji jest to, że różne skalowania oznaczają różne optymalne , co jest nieco ortogonalne w stosunku do tego konkretnego problemu. C
Marc Claesen

2
Ale rzeczywiście może być tak, że bliskość wzdłuż jednego wymiaru jest ważniejsza. Tak więc celem nie jest naprawdę taka sama wariancja we wszystkich funkcjach, ale skalowanie ich w taki sposób, aby odległości wzdłuż każdej funkcji miały takie samo znaczenie dla zadania.
isarandi

@Marc Claesen, jeśli twoje zmienne mają różne rzędy wielkości, to twoje wagi będą również różnych rzędów wielkości, a norma l2 skoncentruje się na danych wejściowych, które mają małą wariancję i odpowiednio duże wagi. Innymi słowy, regularyzacja norm wagi zapewnia, że ​​„małe” nakłady mają niewielki wpływ. Ma to sens tylko wtedy, gdy ustandaryzowałeś „małe” (na podstawie danych wejściowych), np.
Poprzez

1
@ seanv507, który dotyczy tylko liniowego SVM.
Marc Claesen

0

Zależy to od używanego jądra. Zdecydowanie najczęściej stosowanym (oprócz liniowym) jest jądro gaussowskie, które ma formę

f=exp(||x1x2||22σ2)

SVM przyjmuje tę funkcję i używa jej do porównania podobieństwa punktu ( ) do każdego innego punktu w zestawie treningowym poprzez zsumowanie różnic w następujący sposób:x1

(x1l1)2+(x2l2)2...+(xnln)2

gdzie jest twoim przykładem, a wartości są punktami orientacyjnymi.xl

Jeśli cecha wynosi od 0 do 50 000, podczas gdy cecha mieści się w zakresie od 0 do 0,01, możesz zobaczyć, że zdominuje tę sumę, podczas gdy będzie miało praktycznie żadnego wpływu. Z tego powodu konieczne jest skalowanie funkcji przed zastosowaniem jądra.x1x2x1x2

Jeśli chcesz dowiedzieć się więcej, polecam moduł 12 (Wspierające maszyny wektorowe) z internetowego kursu Stanforda dotyczącego uczenia maszynowego w Coursera (bezpłatny i dostępny w dowolnym momencie): https://www.coursera.org/course/ml

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.