libsvm „osiąganie maksymalnej liczby iteracji” ostrzeżenie i wzajemna weryfikacja

20

Używam libsvm w trybie C-SVC z wielomianowym jądrem stopnia 2 i muszę trenować wiele SVM. Każdy zestaw treningowy ma 10 funkcji i 5000 wektorów. Podczas treningu otrzymuję to ostrzeżenie dla większości maszyn SVM, które trenuję:

WARNING: reaching max number of iterations
optimization finished, #iter = 10000000

Czy ktoś mógłby wyjaśnić, co oznacza to ostrzeżenie i być może jak tego uniknąć?

Chcę również zastosować weryfikację krzyżową dla moich modeli w celu określenia najlepszych wyborów dla gamma i C (regularyzacja). Mój plan to po prostu wypróbować każdą kombinację tych 10 wartości: 0,00001, 0,0001, 0,001, 0,01, 0,1, 1, 10, 100, 1000, 10000 dla obu parametrów i zobaczyć, która kombinacja zapewnia najlepszą dokładność podczas walidacji krzyżowej. Czy to wystarczy? Czy powinienem użyć więcej wartości w tym przedziale, czy powinienem wybrać szerszy przedział?

Mihai Todor
źródło
Wypróbuj tryb NU_SVC, powinien rozwiązać Twój problem.
Hosein Bitaraf

Odpowiedzi:

20

To ostrzeżenie oznacza, że ​​procedura iteracyjna używana przez LIBSVM do rozwiązania kwadratowego problemu optymalizacji w celu znalezienia hiperpłaszczyzny maksymalnego marginesu (tj. Parametrów i ) oddzielającej dane osiągnęła maksymalną liczbę iteracji i będzie musiała się zatrzymać, podczas gdy bieżące przybliżenie dla można dodatkowo zwiększyć (tj. można zmienić, aby wartość funkcji celu była bardziej ekstremalna). Krótko mówiąc, oznacza to, że LIBSVM uważa, że ​​nie udało mu się znaleźć hiperpłaszczyzny maksymalnego marginesu, co może, ale nie musi być prawdą.b w wwbww

Istnieje wiele powodów, dla których może się to zdarzyć, sugeruję wykonanie następujących czynności:

  • Normalizuj swoje dane.
  • Upewnij się, że twoje klasy są mniej więcej zrównoważone (mają podobny rozmiar). Jeśli nie, użyj parametru -w, aby przypisać im różne wagi.
  • Wypróbuj różne i . Jądro wielomianowe w LIBSVM ma również parametr „coef0”, ponieważ jądro to γ γ u v +  stopień współczynnika 0Cγ
    γuv+coeff0 degree

Dobrym pomysłem jest wyszukiwanie optymalnego w skali logarytmicznej, tak jak Ty. Myślę, że dla znormalizowanych danych zakres wyszukiwania dla , który zasugerowałeś, powinien być OK. Przydatna kontrola: dokładność klasyfikatora nie powinna zbytnio zmieniać się na granicach tego zakresu i między dwiema wartościami twojego zestawu. Jeśli tak, rozszerz zakres lub dodaj wartości pośrednie.C.CC

Zauważ, że dystrybucja LIBSVM dla Windows powinna zawierać skrypt Pythona o nazwie grid.py, który może dokonać wyboru parametrów (na podstawie weryfikacji krzyżowej i określonych zakresów wyszukiwania). Może także tworzyć wykresy konturowe dla dokładności SVM. To narzędzie może być bardzo pomocne.

Pomocne może być również następujące pytanie o StackOverflow i powiązane pytania: libsvm Shruring Heuristics

Lew
źródło
Dziękuję za szczegółowe wyjaśnienie. To zdecydowanie wyjaśnia tajemnicę. Z grubsza zadałem to samo pytanie na SO (link, który podałeś), ale odpowiedź, którą tam otrzymałem, dotyczyła głównie kurczącej się heurystyki.
Mihai Todor,