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ł?
źródło
Odpowiedzi:
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 ww b w w
Istnieje wiele powodów, dla których może się to zdarzyć, sugeruję wykonanie następujących czynności:
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.C C
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
źródło