Dane wyjściowe Scikit SVM w klasyfikacji wieloklasowej zawsze dają tę samą etykietę

10

Obecnie używam Scikit Learn z następującym kodem:

clf = svm.SVC(C=1.0, tol=1e-10, cache_size=600, kernel='rbf', gamma=0.0, 
              class_weight='auto')

a następnie dopasuj i przewiduj zestaw danych z 7 różnymi etykietami. Mam dziwny wynik. Bez względu na to, jaką technikę walidacji krzyżowej używam przewidywanej etykiety w zestawie walidacyjnym, zawsze będzie to etykieta 7.

Próbuję kilku innych parametrów, w tym pełnego domyślnego ( svm.SVC()), ale tak długo, jak metoda jądra, której używam, jest rbfzamiast polylub linearpo prostu nie działa, podczas gdy działa naprawdę dobrze dla polyi linear.

Poza tym próbowałem już przewidywać dane pociągu zamiast danych sprawdzania poprawności i idealnie pasują.

Czy ktoś już widzi tego rodzaju problem i wie, co się tutaj dzieje?

Nigdy nie patrzę szczegółowo na rozkład zajęć, ale wiem, że powinno to być około 30% z nich to 7, 14% to 4.

Próbuję nawet manualnej implementacji 1-vs-rest i nadal nie jest to pomocne.

Tamaki Sakura
źródło
Jakie są proporcje twoich danych, które mieszczą się w każdej z klas?
gung - Przywróć Monikę
Rzeczywiście jest więcej „7” w moich danych, ale niewiele. Około 30% z nich to 7. @gung
Tamaki Sakura

Odpowiedzi:

10

Cγ

Program scikit-learn ma ograniczone możliwości wyszukiwania hiperparametrów, ale można go używać razem z biblioteką dostrajania, taką jak Optunity . Przykład na temat dostrajania scikit-learn SVC z Optunity jest dostępny tutaj .

Oświadczenie: Jestem głównym programistą Optunity.

Marc Claesen
źródło
Właściwie próbuję ręcznie każdej kombinacji C i gamma, która jest potęgą 10 od 0 do 4, ale wszystkie dają mi pełną 7. Zacząłem nawet wątpić, czy poprawnie skompiluję scikit.
Tamaki Sakura
8

Problemem okazuje się testowanie parametrów. Nie próbowałem, kiedy gammajest między 0,0 (co jest 1 / n_funkcja) i 1. Na moich danych gammanależy zwrócić się do czegoś wokół1e-8

Tamaki Sakura
źródło
4
γ