Moim celem jest klasyfikacja sygnałów z czujników. Dotychczasowe pojęcie mojego rozwiązania to: i) Funkcje inżynieryjne z surowego sygnału ii) Wybieranie odpowiednich funkcji za pomocą ReliefF i podejścia klastrowego iii) Zastosuj NN, Losowy Las i SVM
Jestem jednak uwięziony w dylemacie. W ii) i iii) istnieją hiperparametry, takie jak k-Najbliższe Neigbours dla ReliefF lub długość okna, dla którego ocenia się sygnał czujnika lub liczba ukrytych jednostek w każdej warstwie NN
Tutaj widzę 3 problemy: 1) Strojenie parametrów wyboru cech wpłynie na wydajność klasyfikatora 2) Optymalizacja hiperparametrów klasyfikatora wpłynie na wybór cech. 3) Ocena każdej możliwej kombinacji konfiguracji jest trudna do rozwiązania.
Więc moje pytania są następujące: a) Czy mogę przyjąć uproszczenie, czy parametry wyboru funkcji strojenia można oddzielić od parametrów klasyfikatora strojenia? b) Czy są jakieś inne możliwe rozwiązania?
źródło
Odpowiedzi:
Tak jak sam to obserwowałeś, wybór funkcji (wybór funkcji) może mieć wpływ na to, które hiperparametry dla twojego algorytmu są optymalne, a które hiperparametry wybrane dla twojego algorytmu mogą mieć wpływ na to, który wybór cech byłby optymalny.
Tak więc, jeśli naprawdę zależy ci na wyciśnięciu każdego procentu wydajności z twojego modelu i możesz sobie pozwolić na wymaganą ilość obliczeń, najlepszym rozwiązaniem jest prawdopodobnie wybór funkcji i dostrajanie hiperparametrów „w tym samym czasie”. Prawdopodobnie nie jest to łatwe (w zależności od wyboru funkcji). Wyobrażam sobie, że działałoby to tak, jakby mieć różne zestawy cech jako kandydatów i traktować wybór jednego zestawu cech ze wszystkich tych zestawów kandydatów jako dodatkowy hiperparametr.
W praktyce może to jednak nie być wykonalne. Ogólnie rzecz biorąc, jeśli nie możesz sobie pozwolić na ocenę wszystkich możliwych kombinacji, polecam:
Bardzo luźno optymalizuj hiperparametry, aby upewnić się, że nie przypisujesz ekstremalnie złych wartości do niektórych hiperparametrów. Często można to zrobić ręcznie, jeśli dobrze rozumiesz swoje hiperparametry lub wykonujesz bardzo krótką procedurę optymalizacji hiperparametrów, używając tylko kilku funkcji, o których wiesz, że w przeciwnym razie są całkiem dobre.
Wybór funkcji z hiperparametrami, które być może nie są w 100% zoptymalizowane, ale przynajmniej nie są straszne. Jeśli masz już co najmniej dość przyzwoicie skonfigurowany algorytm uczenia maszynowego, posiadanie dobrych funkcji będzie znacznie ważniejsze dla Twojej wydajności niż hiperoptymalizacja mikroparametrów. Ekstremalne przykłady: jeśli nie masz żadnych funkcji, nie możesz niczego przewidzieć. Jeśli masz funkcję oszukiwania, która zawiera etykietę klasy, możesz idealnie sklasyfikować wszystko.
Zoptymalizuj hiperparametry za pomocą funkcji wybranych w powyższym kroku. Powinien to być teraz dobry zestaw funkcji, w którym warto nieco zoptymalizować hyperparamy.
Aby odpowiedzieć na dodatkowe pytanie, które Nikolas opublikował w komentarzach, dotyczące sposobu, w jaki wszystkie te rzeczy (wybór funkcji, optymalizacja hiperparametrów) współdziałają z k-krotną weryfikacją krzyżową: Powiedziałbym, że to zależy.
Ilekroć w ogóle używasz danych w jednym z foldów, a następnie oceniasz wydajność w tym samym folderze, otrzymujesz tendencyjne oszacowanie swojej wydajności (będziesz przeceniać wydajność). Tak więc, jeśli użyjesz danych we wszystkich fałdach dla kroku wyboru funkcji, a następnie ocenisz wydajność dla każdego z tych fałd, otrzymasz tendencyjne oszacowania wydajności dla każdego z nich (co nie jest dobre). Podobnie, jeśli korzystasz z optymalizacji hiperparametrów opartej na danych i używasz danych z niektórych fałd (lub wszystkich fałd), a następnie oceniasz te same fałdy, ponownie uzyskasz błędne oceny wydajności. Możliwe rozwiązania to:
Powtórz cały potok w ramach każdej zakładki osobno (np. W ramach każdej zakładki, dokonaj wyboru funkcji + optymalizacji hiperparametrów i modelu treningowego). Oznacza to, że k-krotna walidacja krzyżowa daje obiektywne oszacowania wydajności tego kompletnego potoku .
Podziel swój początkowy zestaw danych na „zestaw danych przetwarzania wstępnego” i „zestaw danych pociągu / testu”. Możesz dokonać wyboru funkcji i optymalizacji hiperparametrów w '' zestawie danych przetwarzania wstępnego ''. Następnie naprawiasz wybrane funkcje i hiperparametry oraz wykonujesz k-krotną weryfikację krzyżową w zestawie danych „pociąg / test”. Oznacza to, że k-krotna walidacja krzyżowa daje obiektywne oszacowania wydajności twojego algorytmu ML, biorąc pod uwagę ustalony zestaw funkcji i wartości hiperparametrów .
Zwróć uwagę, w jaki sposób oba rozwiązania prowadzą do nieco różnych oszacowań wydajności. To, które jest bardziej interesujące, zależy od przypadku użycia, zależy od tego, jak planujesz wdrożyć rozwiązania uczenia maszynowego w praktyce. Jeśli jesteś na przykład firmą, która chce mieć pełen zakres wyboru funkcji + optymalizację hiperparametrów + szkolenie uruchamiane automatycznie każdego dnia / tygodnia / miesiąca / roku / cokolwiek, będziesz również zainteresowany wydajnością tego kompletnego potok, a będziesz potrzebować pierwszego rozwiązania.
Jeśli z drugiej strony możesz sobie pozwolić na wybór funkcji i optymalizację hiperparametrów tylko raz w życiu, a następnie tylko nieco regularnie ponownie trenować algorytm (z ustalonymi wartościami funkcji i wartościami hiperparamów), wówczas wydajność tylko tego kroku będzie to, co Cię interesuje, i powinieneś wybrać drugie rozwiązanie
źródło
Nikt nie wspomniał o podejściach, które sprawiają, że strojenie hiperparametrów i wybór funkcji są takie same, więc powiem o tym. W tym przypadku powinieneś zaprojektować wszystkie funkcje, które chcesz na początku i uwzględnić je wszystkie.
Badania prowadzone obecnie w społeczności statystycznej próbują uczynić wybór funkcji kryterium strojenia. Zasadniczo karzesz model w taki sposób, że zachęca się go do wybrania tylko kilku funkcji, które pomogą mu dokonać najlepszej prognozy. Ale dodajesz parametr strojenia, aby określić, ile kary powinieneś ponieść.
Innymi słowy, pozwalasz modelowi wybierać funkcje dla ciebie i masz mniej więcej kontrolę nad liczbą funkcji. To faktycznie zmniejsza obliczenia, ponieważ nie musisz już decydować, które funkcje, ale tylko ile funkcji i modelu zajmie się resztą.
Zatem kiedy przeprowadzasz walidację krzyżową parametru, skutecznie wykonujesz również walidację krzyżową przy wyborze funkcji.
Już istnieje wiele modeli ML, które w ten czy inny sposób uwzględniają tę funkcję wyboru.
Krótko mówiąc, ludzie próbowali jednocześnie włączyć dostrajanie parametrów i wybór funkcji, aby zmniejszyć złożoność i przeprowadzić weryfikację krzyżową
źródło
@DennisSoemers ma świetne rozwiązanie. Dodam dwa podobne rozwiązania, które są nieco bardziej jednoznaczne i oparte na inżynierii cech i selekcji: praktyczne podejście do modeli predykcyjnych autorstwa Maxa Kuhna i Kjella Johnsona.
Kuhn używa tego terminu
resample
do opisaniafold
zestawu danych, ale wydaje sięfold
, że dominującym terminem na StackExchange jest , więc użyję tego terminufold
poniżej.Opcja 1 - wyszukiwanie zagnieżdżone
Jeśli moc obliczeniowa nie jest czynnikiem ograniczającym, zalecane jest podejście sprawdzania zagnieżdżenia, w którym istnieją 3 poziomy zagnieżdżania:
1) zewnętrzne zagięcia, każde zagięcie z innym podzbiorem cech
2) fałdy wewnętrzne, każda fałda z wyszukiwaniem hiperparametrów
3) wewnętrzne fałdy każdego wyszukiwania hiperparametrów, każdy fałd z innym zestawem hiperparametrów.
Oto algorytm:
Zdjęcie z rozdziału 11.2: Proste filtry
-> Select feature subset
Krok zakłada się być przypadkowe, ale istnieją inne techniki, które są opisane w tej książce w rozdziale 11 .Aby to wyjaśnić
-> Perform hyperparameter tuning step
, możesz przeczytać o zalecanym podejściu do sprawdzania poprawności zagnieżdżonej . Chodzi o to, aby przetestować solidność procesu szkoleniowego poprzez wielokrotne przeprowadzanie procesu szkoleniowego i testowego na różnych fałdach danych i sprawdzanie średniej wyników testów.Opcja 2 - oddzielne wyszukiwanie hiperparametrów i funkcji
Oto jak Kuhn i Johsnon frazują ten proces:
Rozdział 12.5: Globalne metody wyszukiwania
źródło
Myślę, że trochę się nad tym zastanawiasz. Wybór funkcji, który jest częścią inżynierii cech, jest zwykle pomocny, ale niektóre zbędne funkcje nie są zbyt szkodliwe na wczesnym etapie systemu uczenia maszynowego. Tak więc najlepszą praktyką jest, aby najpierw wygenerować wszystkie znaczące funkcje, a następnie użyć ich do wyboru algorytmów i dostrojenia modeli, po dostrojeniu modelu można przyciąć zestaw funkcji lub zdecydować o użyciu nowych funkcji.
Procedura uczenia maszynowego jest w rzeczywistości procesem iteracyjnym, w którym wykonuje się funkcje inżynierii, a następnie wypróbowuje niektóre algorytmy, a następnie dostosowuje modele i wraca, aż wynik będzie zadowalający.
źródło