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.
Teraz zastanawiam się: czy to błąd spowodowany przez powiązania ruby, ponieważ libsvm
używam ( rb-libsvm ), czy też to teoretycznie można wyjaśnić ?
Czy parametr zawsze powinien zmieniać wydajność klasyfikatora?
machine-learning
svm
libsvm
alfa
źródło
źródło
Odpowiedzi:
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.
źródło
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.
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:
wtedy klasyfikator wyuczony przy użyciu dużej wartości c jest najlepszy.
Z drugiej strony, jeśli przyszłe dane wyglądają tak:
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ć?
źródło
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).
źródło
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.
źródło
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ć.
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.
źródło
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.
źródło
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.
źródło