Niedawno zacząłem uczyć się pracy sklearn
i właśnie spotkałem się z tym osobliwym rezultatem.
Użyłem digits
dostępnego zestawu danych, sklearn
aby wypróbować różne modele i metody szacowania.
Kiedy testowaliśmy model Pomoc Wektor maszynowego na danych, znalazłem tam są dwie różne klasy w sklearn
klasyfikacji SVM: SVC
a LinearSVC
, gdzie dawne zastosowania jednego przed jednym podejściem i innych zastosowań jedno-przeciw-reszta podejście.
Nie wiedziałem, jaki wpływ może to mieć na wyniki, więc spróbowałem obu. Przeprowadziłem oszacowanie w stylu Monte Carlo, w którym testowałem oba modele 500 razy, za każdym razem losowo dzieląc próbkę na 60% treningu i 40% testu i obliczając błąd prognozy na zestawie testowym.
Zwykły estymator SVC wygenerował następujący histogram błędów: Podczas gdy liniowy estymator SVC wytworzył następujący histogram:
Co może tłumaczyć tak wyraźną różnicę? Dlaczego model liniowy ma większą dokładność przez większość czasu?
I w związku z tym, co może powodować surową polaryzację wyników? Albo dokładność bliska 1, albo dokładność bliska 0, nic pomiędzy.
Dla porównania, klasyfikacja drzewa decyzyjnego dała znacznie bardziej normalnie rozproszony poziom błędu z dokładnością około 0,85.
źródło
Similar to SVC with parameter kernel=’linear’, but implemented in terms of liblinear rather than libsvm, so it has more flexibility in the choice of penalties and loss functions and should scale better (to large numbers of samples).
Odpowiedzi:
Zwykły SVM z wartościami domyślnymi wykorzystuje funkcję radialną jako jądro SVM. Jest to w zasadzie jądro gaussowskie, zwane również krzywą dzwonową. Oznacza to, że ziemia niczyja między różnymi klasami jest tworzona za pomocą funkcji Gaussa. Linear-SVM używa liniowego jądra dla funkcji bazowej, więc możesz myśleć o tym jak o funkcji w kształcie ^. Jest znacznie mniej przestrajalny i jest w zasadzie tylko interpolacją liniową.
Ludzie w pewnym sensie wbijają to pytanie, ponieważ nie dostarczyliście zbyt wielu informacji, ale zaglądają głęboko w to, co opublikowaliście ... uderza to w niektóre podstawowe aspekty naprawdę zrozumienia szczegółów odchylenia i wariancji oraz różnicy między liniową i nieliniową funkcje podstawowe w SVM.
Sprawdź ten obraz opisujący cztery regiony wysokiego i niskiego odchylenia oraz wysokiej i niskiej wariancji. Oczywiście najlepszym miejscem jest niska wariancja i niska stronniczość.
Najpierw oceńmy wariancję -
Teraz spójrz na swoje działki:
Nieliniowa funkcja podstawowa ma większą wariancję. Zobacz, jak to jest głośniejsze niż jądro liniowe! Jądro liniowe ma mniejszą wariancję. Zobacz, jak jest mniej głośno!
Teraz pozwala ocenić stronniczość -
Które jądro jest bardziej dokładne? Możemy dodać podane błędy. Nieliniowe jądro ma całkowity błąd ~ 550 + 325 = ~ 875. Jądro liniowe ma błąd ~ 690 + ~ 50 = ~ 740. Jądro liniowe wydaje się ogólnie lepiej, ale ogólnie jest całkiem blisko. Sprawy stają się trudne!
Kładąc wszystko razem
Zobacz, jak jądro liniowe wykonało słabą robotę na zerach i naprawdę świetną robotę na zerach. To jest dość niezrównoważone. Gdzie jako nieliniowe jądro jest bardziej zrównoważone. Wygląda na to, że najlepszym rozwiązaniem może być stworzenie zrównoważonego modelu, który nie ma tak dużej wariancji. Jak kontrolujemy wysoką wariancję? Bingo - regularyzacja. Możemy dodać regularyzację do modelu nieliniowego i prawdopodobnie zobaczymy znacznie lepsze wyniki. Jest to parametr C w scikit learn SVM, który chcesz zwiększyć od wartości domyślnej. Możemy również grać z parametrem gamma. Gamma kontroluje szerokość Gaussa. Może spróbuj zwiększyć nieco ten jeden, aby uzyskać mniej hałaśliwych wyników, np. Większy obszar niczyjej pomiędzy klasami.
Mam nadzieję że to pomoże!
źródło
Jeśli użyłeś domyślnego jądra w SVC (), jądrze Radial Basis Function (rbf), prawdopodobnie nauczyłeś się bardziej nieliniowej granicy decyzji. W przypadku zestawu danych zawierających cyfry znacznie przewyższy to liniową granicę decyzyjną dla tego zadania (patrz 3.1 „Podstawowy klasyfikator liniowy”)
źródło