Mam zestaw danych zawierający 140000 przykładów i 30 funkcji, dla których uczę kilku klasyfikatorów do klasyfikacji binarnej (SVM, regresja logistyczna, losowy las itp.)
W wielu przypadkach dostrajanie hiperparametrów w całym zbiorze danych przy użyciu wyszukiwania siatkowego lub losowego jest zbyt kosztowne pod względem czasowym.
Zacząłem stosować następującą technikę
- Podpróbka mojego zestawu danych
- Użyj uzyskanej frakcji, aby dostroić hiperparametry
- Za pomocą uzyskanych parametrów wytrenuj model przy użyciu całego zestawu danych
Aby ocenić każdy zestaw parametrów, w drugim etapie użycia I sklearn
„S GridSearchCV
z CV = 10. Aby ocenić ostateczny model, który tworzę w trzecim etapie używam sklearn
„s cross_val_predict
. W tym sensie oceniam moje modele, pozostawiając 10% procent danych, trenuję resztę i mierzę dokładność predykcyjną na 10%, iteracyjnie 10 razy, a następnie biorąc średnią wyników.
Niepokoiło mnie to, że dokładność prognoz, którą uzyskuję ze szkolenia na całym zestawie danych, jest bardzo zbliżona do oceny, którą otrzymuję, gdy dostrajam parametry w celu uzyskania najlepszego zestawu parametrów (każdy testowany zestaw parametrów generuje wynik uzyskany ze średniej 10- wyniki walidacji krzyżowej).
W większości przypadków dokładność cross_val_predict
mierzona za pomocą wszystkich przykładów szkolenia (cały zestaw danych) jest nieco wyższa niż wynik oceny najlepszych parametrów.
Aby to zilustrować tutaj, jest ocena zestawu parametrów (w mniejszym zestawie danych niż to, co opisałem powyżej, ale efekt jest taki sam)
Best parameters set found on development set:
{'kernel': 'rbf', 'C': 9, 'gamma': 0.1}
Scores for all sets of parameters
0.851 (+/-0.006) for {'kernel': 'rbf', 'C': 3, 'gamma': 0.5}
0.852 (+/-0.006) for {'kernel': 'rbf', 'C': 3, 'gamma': 0.1}
0.829 (+/-0.006) for {'kernel': 'rbf', 'C': 3, 'gamma': 0.001}
0.853 (+/-0.006) for {'kernel': 'rbf', 'C': 9, 'gamma': 0.1}
...
A oto uśrednione wyniki (z cross_val_predict
), które otrzymałem ze szkolenia na całym zestawie danych przy użyciu najlepszych parametrów
precision recall f1-score support
0 0.86 0.85 0.86 15417
1 0.86 0.87 0.87 16561
avg / total 0.86 0.86 0.86 31978
acc score: 0.863750078179
roc au score: 0.863370490059
[[13147 2270]
[ 2087 14474]]
Jak widać szkolenie na całym zestawie danych poprawia wyniki. Zweryfikowałem również, że źle dostrojony model (np. Używając wartości domyślnych lub wartości losowych dla C
i gamma
) prowadzi do znacznie gorszej dokładności prognoz.
Ogólnie uważam, że dostrajanie hiperparametrów w podzbiorze nie jest idealne, ale może potencjalnie prowadzić do stosunkowo dobrych wyników bez konieczności zbyt długiego oczekiwania. Na przykład przed użyciem tego podejścia użyłem optunity
pakietu do strojenia hiperparametru w całym zestawie danych. Ta procedura zajęłaby 3-5 dni i przyniosła wyniki, które albo miały bardzo dobrą precyzję, albo naprawdę dobre przywołanie, ale nie oba, więc chociaż dla każdej klasy albo precyzja, albo przywołanie były naprawdę wysokie (wyższe niż jakakolwiek inna klasyfikatory osiągnęły) pomiar f1 był naprawdę niski. Przeciwnie, zastosowanie późniejszego podejścia prowadzi do kilku godzin treningu i lepszego pomiaru F1.
Moje obawy to:
Czy ograniczam moją dokładność klasyfikacji? Czy unikam używania całej mocy predykcji, jaką może zaoferować mój zestaw danych, dostrajając tylko w podzbiorze? Jeśli dzieje się taka szkoda w wydajności, czy jest w jakiś sposób ograniczona przez jakiś czynnik?
źródło
Odpowiedzi:
Oprócz odpowiedzi Jima (+1): W przypadku niektórych klasyfikatorów wartości hiperparametrów zależą od liczby przykładów treningowych, na przykład dla liniowej SVM głównym problemem optymalizacji jest:
z zastrzeżeniem
Należy zauważyć, że problem optymalizacji jest w zasadzie miarą niedopasowanego terminu danych (suma nad ) i terminem regularyzacji, ale zwykły parametr regularyzacji jest umieszczony wraz z terminem niedopasowania danych. Oczywiście im większa liczba wzorów treningowych, tym większe będzie sumowanie i mniejsze powinno być w celu utrzymania tej samej równowagi z wielkością ciężarów. C.ξja do
Niektóre implementacje SVM zmieniają parametry na
aby to zrekompensować, ale niektórzy nie. Dodatkową kwestią do rozważenia jest to, czy optymalne hiper-parametry zależą od liczby przykładów treningowych, czy nie.
Zgadzam się z Jimem, że przekroczenie kryterium wyboru modelu może być większym problemem, ale jeśli masz wystarczającą ilość danych nawet w podpróbce, może to nie być poważny problem.
źródło
Odp .: Tak, ponieważ ryzykujesz przeregulowanie (hiperparametry) w tym konkretnym zestawie testów wynikającym z wybranego podziału testu na pociąg.
Odp .: Tak, ale powszechna mądrość w uczeniu maszynowym: przy optymalnych hiperparametrach, powiedz , zamontuj swoje modele w całym zbiorze danych i ustaw ten model jako ostateczny model dla nowych, niewidzialnych przyszłych przypadków.λ∗
Odp .: patrz poprzednia odpowiedź.
Odp .: idem.
Odp .: Pamiętaj, że różni się to od tego, o co pytano w tytule. 10-krotne CV iteruje ponad 10 podziałów pociągów testowych, aby uzyskać „obiektywną” (mniej tendencyjną) ocenę uogólnienia (mierzoną w tym przypadku przez dokładność). 10-krotne CV dokładnie odnosi się do problemu, o którym mówię w pierwszej odpowiedzi.
Odp .: Jest to miara „w próbie”, która może być optymistycznie tendencyjna. Ale nie zapominaj, że masz wiele przypadków i stosunkowo mało funkcji, więc to uprzedzenie optymistyczne może nie stanowić problemu. Samorodek uczenia maszynowego: „najlepszym regulatorem jest więcej danych”.
Odp .: patrz poprzednia odpowiedź. Spójrz na wykresy hiperparametrów: czy strojenie zmniejsza błąd i o ile? Z tego, co mówisz, tuning niewiele robi.
Możesz to przetestować w następujący sposób. Podejdź do 70% -30% podziału testu pociągu. Porównaj skuteczność predykcyjną:
Niech oba modele przewidują zestaw testowy. Jeśli wydajność jest bardzo bliska, strojenie niewiele robi. Jeśli wydajność różni się na korzyść tuningowanego modelu, przejdź do podejścia tuningowego.
źródło
Odpowiem za sztuczne sieci neuronowe (ANN).
Hiperparametry ANN mogą określać proces uczenia się (np. Szybkość uczenia się lub rozmiar mini-partii) lub architekturę (np. Liczbę ukrytych jednostek lub warstw).
Strojenie hiperparametrów architektonicznych na podzestawie zestawu treningowego prawdopodobnie nie jest dobrym pomysłem (chyba że zestaw treningowy naprawdę nie ma różnorodności, tj. Zwiększenie rozmiaru zestawu treningowego nie zwiększa wydajności ANN), ponieważ hiperparametry architektoniczne zmieniają pojemność ANN.
Byłbym mniej zaniepokojony dostrajaniem hiperparametrów, które definiują proces uczenia się w podzbiorze twojego zestawu treningowego, ale sądzę, że należy to zweryfikować empirycznie.
źródło
Ten artykuł dotyczy przyjmowania innych / mniejszych zestawów danych w celu strojenia większych zestawów danych: https://papers.nips.cc/paper/5086-multi-task-bayesian-optimization.pdf
Myślę, że nie jest to zły pomysł w przeciwieństwie do tego, co powiedział Jim .
źródło
Możesz użyć algorytmów optymalizacji hiperparametrów, które obsługują oceny wielu wierności, tj. Oceny podzbiorów danych, aby uzyskać przybliżone, ale przydatne oszacowanie optymalnych wartości hiperparametrów dla całego zestawu danych. Takie podejścia zazwyczaj pozwalają zmniejszyć całkowity koszt obliczeniowy potrzebny do uruchomienia optymalizacji hiperparametrów.
źródło
Możesz spojrzeć na https://link.springer.com/chapter/10.1007/978-3-319-53480-0_27, w którym zbadaliśmy wpływ losowego próbkowania na strojenie hiperparametrów SVM przy użyciu 100 rzeczywistych- światowe zestawy danych ...
źródło