Jaki jest wpływ C na SVM z liniowym jądrem?

134

Obecnie używam SVM z liniowym jądrem do klasyfikowania moich danych. Zestaw treningowy nie zawiera błędów. Próbowałem kilka wartości dla parametru ( ). Nie zmieniło to błędu w zestawie testowym.C105,,102

Teraz zastanawiam się: czy to błąd spowodowany przez powiązania ruby, ponieważ libsvmużywam ( rb-libsvm ), czy też to teoretycznie można wyjaśnić ?

Czy parametr zawsze powinien zmieniać wydajność klasyfikatora?C

alfa
źródło
Tylko komentarz, a nie odpowiedź: Każdy program, który minimalizuje sumę dwóch terminów, takich jak powinien (imho) powiedzieć ci, jakie są te dwa warunki na końcu, więc że możesz zobaczyć, jak się równoważą. (Aby uzyskać pomoc w samodzielnym obliczeniu dwóch terminów SVM, spróbuj zadać osobne pytanie. Czy spojrzałeś na kilka najgorzej sklasyfikowanych punktów? Czy mógłbyś napisać problem podobny do twojego?)|w|2+Cξi,
den

Odpowiedzi:

136

Parametr C mówi optymalizacji SVM, o ile chcesz uniknąć błędnej klasyfikacji każdego przykładu szkolenia. W przypadku dużych wartości C optymalizacja wybierze hiperpłaszczyznę o mniejszym marginesie, jeśli ta płaszczyzna lepiej poradzi sobie z prawidłową klasyfikacją wszystkich punktów treningowych. I odwrotnie, bardzo mała wartość C spowoduje, że optymalizator wyszuka hiperpłaszczyznę oddzielającą o większym marginesie, nawet jeśli ta hiperpłaszczyzna źle sklasyfikuje więcej punktów. W przypadku bardzo niewielkich wartości C powinieneś dostać błędnie sklasyfikowane przykłady, często nawet jeśli dane treningowe można rozdzielić liniowo.

Marc Shivers
źródło
1
OK, rozumiem, że C określa wpływ błędnej klasyfikacji na funkcję celu. Funkcja celu to suma terminu regularyzacji i wskaźnika błędnej klasyfikacji (patrz en.wikipedia.org/wiki/Support_vector_machine#Soft_margin ). Kiedy zmieniam C, nie ma to żadnego wpływu na minimum mojej funkcji celu. Czy to może oznaczać, że termin regularyzacji jest zawsze bardzo mały?
alfa
3
Sugerowałbym wypróbowanie szerszego zakresu wartości C, może 10 ^ [- 5, ..., 5] lub więcej, jeśli optymalizacja zestawu danych jest szybka, aby sprawdzić, czy otrzymujesz coś, co wygląda bardziej rozsądnie. Zarówno błąd szkolenia, jak i wartość kosztu minimalnego powinny się zmieniać wraz ze zmianą C. Ponadto, czy skala twoich danych jest ekstremalna? Zasadniczo optymalny parametr C powinien być większy podczas skalowania danych i odwrotnie, więc jeśli masz bardzo małe wartości dla funkcji, pamiętaj o uwzględnieniu bardzo dużych wartości dla możliwych wartości C. Jeśli żadne z powyższych nie pomoże, zgaduję, że problem tkwi w rubinowych wiązaniach
Marc Shivers,
3
zmiana zrównoważonej dokładności z 0,5 (tylko zgadywanie) na 0,86 nie wydaje mi się marginalnym wpływem. Dobrym pomysłem byłoby zbadanie dokładniejszej siatki wartości dla C, jak sugeruje Marc, ale podane wyniki wydają się być dość normalnym zachowaniem. Można się spodziewać, że błąd wróci ponownie, ponieważ C ma tendencję do nieskończoności z powodu nadmiernego dopasowania, ale w tym przypadku nie stanowi to większego problemu. Pamiętaj, że jeśli naprawdę interesuje Cię zrównoważony błąd, a Twój zestaw treningowy nie ma podziału 50:50, możesz uzyskać lepsze wyniki ...
Dikran Marsupial
2
... przez użycie różnych wartości C dla wzorców należących do klas dodatnich i ujemnych (co jest asymptotycznie równoważne z ponownym próbkowaniem danych w celu zmiany proporcji wzorców należących do każdej klasy).
Dikran Marsupial
2
Myślę, że możliwe jest, że gdy dojdziesz do C = 10 ^ 0, SVM już poprawnie klasyfikuje wszystkie dane treningowe i żaden z wektorów pomocniczych nie jest związany (alfa jest równy C), w takim przypadku zwiększenie C ma brak wpływu na rozwiązanie.
Dikran Marsupial
152

W SVM poszukujesz dwóch rzeczy: hiperpłaszczyzny o największym minimalnym marginesie i hiperpłaszczyzny, która poprawnie oddziela jak najwięcej instancji. Problem polega na tym, że nie zawsze będziesz w stanie uzyskać obie rzeczy. Parametr c określa, jak wielkie jest twoje pragnienie. Narysowałem poniżej mały przykład, aby to zilustrować. Po lewej stronie masz niskie c, co daje dość duży minimalny margines (fioletowy). Wymaga to jednak zaniedbania wartości odstającej niebieskiego koła, której nie udało się poprawnie sklasyfikować. Po prawej stronie masz wysokie c. Teraz nie zaniedbujesz wartości odstającej, dzięki czemu uzyskasz znacznie mniejszy margines.

wprowadź opis zdjęcia tutaj

Który z tych klasyfikatorów jest najlepszy? To zależy od tego, jak będą wyglądać przyszłe dane, które przewidujesz, i najczęściej tego nie wiesz. Jeśli przyszłe dane wyglądają tak:

duże c jest najlepsze wtedy klasyfikator wyuczony przy użyciu dużej wartości c jest najlepszy.

Z drugiej strony, jeśli przyszłe dane wyglądają tak:

niskie c jest najlepsze wtedy klasyfikator wyuczony przy użyciu niskiej wartości c jest najlepszy.

W zależności od zestawu danych zmiana c może, ale nie musi, powodować powstanie innej hiperpłaszczyzny. Jeśli to ma produkować inną hiperpłaszczyznę, że nie oznacza to, że klasyfikator będzie wyjściowe różnych klas dla danego danych, które zostały wykorzystane do sklasyfikowania. Weka to dobre narzędzie do wizualizacji danych i zabawy z różnymi ustawieniami SVM. Może to pomóc lepiej zrozumieć, jak wyglądają twoje dane i dlaczego zmiana wartości c nie zmienia błędu klasyfikacji. Ogólnie rzecz biorąc, niewiele instancji treningowych i wiele atrybutów ułatwia liniowe rozdzielenie danych. Również fakt, że oceniasz swoje dane treningowe, a nie nowe, niewidoczne dane, ułatwia separację.

Z jakiego rodzaju danych próbujesz się nauczyć modelu? Ile danych? Czy możemy to zobaczyć?

Kent Munthe Caspersen
źródło
4
Nie dotknąłem danych od ponad 3 lat. Jest bardzo wymiarowy i głośny i nie wolno mi go publikować. Odpowiedź na to pytanie już została udzielona, ​​ale myślę, że twoja wizualizacja jest bardzo dobra i intuicyjna.
alfa
niesamowite. czy masz takie wyjaśnienia dotyczące wartości gama?
MonsterMMORPG
2
Parametr gamma służy do funkcji jądra Gaussa. Funkcje jądra można postrzegać jako skuteczny sposób na przekształcenie oryginalnych elementów w inną przestrzeń, gdzie oddzielająca hiperpłaszczyzna w nowej przestrzeni cech nie musi być liniowa w oryginalnej przestrzeni cech. Na przykład dwuwymiarowa pozycja punktu danych w pierwotnej przestrzeni obiektów może być wykorzystana do obliczenia nowej operacji reprezentującej odległość do jakiegoś znacznika na mapie. Dzięki tej nowej funkcji można wprowadzić nieliniowy klasyfikator (w oryginalnej przestrzeni), którego granica decyzji tworzy okrąg wokół znacznika
Kent Munthe Caspersen
@KentMuntheCaspersen czy twoje wyjaśnienie C nie jest nieprawidłowe? Jest odwrotnie niż w książce „Wprowadzenie do statystycznego uczenia się”.
diugalde
2
@ diiugalde, czy możesz cytować z książki, co dokładnie różni się od mojego wyjaśnienia? Zawsze myślę o c jako o koszcie błędnej klasyfikacji (łatwej do zapamiętania przez cw klasyfikacji). W ten sposób wyższe c oznacza wysoki koszt błędnej klasyfikacji, co prowadzi do tego, że algorytm próbuje idealnie oddzielić wszystkie punkty danych. W przypadku wartości odstających nie zawsze jest to możliwe lub nie zawsze prowadzi do dobrego ogólnego wyniku, co jest dobrym powodem do obniżenia / wprowadzenia c.
Kent Munthe Caspersen
26

C jest zasadniczo parametrem regularyzacji, który kontroluje kompromis między uzyskaniem niskiego błędu w danych treningowych a minimalizacją normy odważników. Jest to analogiczne do parametru kalenicy w regresji kalenicy (w rzeczywistości w praktyce istnieje niewielka różnica w wydajności lub teorii między liniowymi maszynami SVM a regresją kalenicy, więc generalnie używam tej drugiej - lub regresji kalenicy jądra, jeśli jest więcej atrybutów niż obserwacji).

Prawidłowe dostrajanie C jest kluczowym krokiem w najlepszej praktyce w stosowaniu maszyn SVM, ponieważ minimalizacja ryzyka strukturalnego (podstawowa zasada podstawowego podejścia) jest realizowana partyjnie poprzez dostrajanie C. Parametr C wymusza górną granicę normy wagi, co oznacza, że ​​istnieje zagnieżdżony zestaw klas hipotez indeksowanych przez C. Gdy zwiększamy C, zwiększamy złożoność klasy hipotez (jeśli nieznacznie zwiększymy C, nadal możemy utworzyć wszystkie modele liniowe, które moglibyśmy wcześniej a także niektóre, których nie mogliśmy wcześniej zwiększyć górnej granicy dopuszczalnej normy odważników). Tak więc, jak implementacja SRM poprzez klasyfikację maksymalnego marginesu, jest ona również implementowana przez ograniczenie złożoności klasy hipotez poprzez kontrolowanie C.

Niestety, teoria określania sposobu ustawiania C nie jest obecnie bardzo dobrze rozwinięta, więc większość ludzi stosuje walidację krzyżową (jeśli coś robi).

Dikran Torbacz
źródło
OK, myślę, że teraz rozumiem znaczenie C. :)
alfa
2
Ale jeśli C jest parametrem regularyzacji, dlaczego wysokie C zwiększa nadmierne dopasowanie, skoro ogólnie mówiąc, regulacja jest wykonywana w celu złagodzenia nadmiernego dopasowania, tj. Poprzez stworzenie bardziej ogólnego modelu?
user1603472
2
C jest parametrem regularyzacji, ale jest zasadniczo związany z terminem niedopasowania danych (suma zmiennych luzu), a nie z terminem regularyzacji (bit marginesu), więc większa wartość C oznacza mniej regularyzacji, a nie więcej. Alternatywnie można wyświetlić zwykłą reprezentację parametru rularyzacji jako 1 / C.
Dikran Torbacz
8

C jest parametrem regulującym, który kontroluje kompromis między uzyskaniem niskiego błędu szkolenia a niskim błędem testowania, czyli możliwością uogólnienia klasyfikatora na niewidzialne dane.

Rozważ funkcję celu liniowej SVM: min | w | ^ 2 + C∑ξ. Jeśli twoje C jest zbyt duże, algorytm optymalizacji spróbuje zmniejszyć | w | w jak największym stopniu, co prowadzi do hiperpłaszczyzny, która próbuje poprawnie sklasyfikować każdy przykład szkolenia. Spowoduje to utratę właściwości uogólniających klasyfikatora. Z drugiej strony, jeśli twoje C jest zbyt małe, dajesz swojej funkcji celu pewną swobodę zwiększania | w | dużo, co doprowadzi do dużego błędu treningowego.

Poniższe zdjęcia mogą pomóc w wizualizacji tego. Liniowy klasyfikator SVM o C = 10000000Liniowy klasyfikator SVM o C = 0,001

deerishi
źródło
Naprawdę nie rozumiem twoich fabuł. Możesz to wyjaśnić?
alfa
1
@alfa: Moim zamiarem pokazania wykresów było: 1) Jeśli C jest zbyt duży (wykres 1), wtedy twój klasyfikator będzie pasował, tzn. spróbuje dokładnie sklasyfikować każdy punkt danych treningowych. Wykres 1 pokazuje, że prawie wszystkie punkty treningowe są poprawnie sklasyfikowane. 2) Z drugiej strony, jeśli C jest za mniejsze (wykres 2), wtedy twój klasyfikator będzie niedopasowany. Wykres 2 pokazuje klasyfikator niedopasowany. Nie dzieli punktów na odpowiadające im klasy. Mam nadzieję że to pomoże.
deerishi
Oznacza to, że twoje osie xi y wykazują dwie różne cechy. Etykiety „długość zestawu danych” i „Suma środków” są trochę mylące?
alfa
Byłoby interesujące zobaczyć, jak właściwy wybór dla C pomaga w obu przypadkach.
alfa
2
Myślę, że nie jest oczywiste, że C = 10000000 jest złym wyborem i uważam, że zestaw danych nie jest odpowiedni, aby to wykazać. Może zestaw danych z kilkoma wartościami odstającymi po niewłaściwej stronie oddzielającej hiperpłaszczyzny byłby lepszy?
alfa
4

Powyższe odpowiedzi są doskonałe. Po uważnym przeczytaniu twoich pytań odkryłem, że istnieją dwa ważne fakty, które moglibyśmy przeoczyć.

  1. Używasz liniowego jądra
  2. Dane treningowe można rozdzielić liniowo, ponieważ „Zestaw treningowy nie zawiera błędów”.

Biorąc pod uwagę 2 fakty, jeśli wartości C zmienią się w rozsądnym zakresie, optymalna hiperpłaszczyzna po prostu losowo przesunie się o niewielką wartość w obrębie marginesu (przerwa utworzona przez wektory nośne).

Intuicyjnie załóżmy, że margines danych treningowych jest mały i / lub nie ma również punktów danych testowych w obrębie marginesu, przesunięcie optymalnej hiperpłaszczyzny w obrębie marginesu nie wpłynie na błąd klasyfikacji zestawu testowego.

Niemniej jednak, jeśli ustawisz C = 0, wówczas SVM zignoruje błędy i po prostu spróbuje zminimalizować sumę kwadratów wag (w), być może możesz uzyskać różne wyniki w zestawie testowym.

luz
źródło
2

Parametr C służy do kontrolowania wartości odstających - niskie C oznacza, że ​​dopuszczamy więcej wartości odstających, wysokie C oznacza, że ​​dopuszczamy mniej wartości odstających.

H. Irshad
źródło
1

Wysoka wartość C (koszt) oznacza wzrost kosztu błędnej klasyfikacji. Oznacza to, że elastyczne jądro stanie się bardziej krępujące, aby uniknąć błędnych obserwacji w zestawie treningowym.

Jeśli jądro ma się skręcać, model nie uogólnia się dobrze podczas przewidywania nowych danych.

Jeśli jądro ma być proste, model nie uogólnia się dobrze podczas przewidywania nowych danych.

Ćwiek
źródło