Jak należy zamówić dobór funkcji i optymalizację hiperparametrów w potoku uczenia maszynowego?

15

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?

Grunwalski
źródło
Uważam, że dostrajanie wyboru funkcji oddzielania i dostrajanie klasyfikatora jest poprawne, ponieważ funkcja heurytyczna dla reliefF ma na celu maksymalizację wariancji międzyklasowej i zminimalizowanie wariancji wewnątrzklasowej, co również wskazuje na dobry klasyfikator. Dlatego dostrajanie optymalnych parametrów dla reliefF sprawia, że ​​dobry klasyfikator jest bardziej „prawdopodobny”. Bardzo matematyczne byłoby jednak sformułowanie matematyczne na poparcie tego pomysłu.
Grunwalski
1
Konkretny wariant tego pytania: czy wybór cech powinien być częścią procedury krzyżowej walidacji (jak w: # dla każdego zestawu hiperparamów klasyfikatora: # dla każdego k-krotnego przebiegu CV: 1) wybór cech, 2) skalowanie cech, 3) dopasowanie klasyfikatora 4) przewidywać na zestawie testowym?
Nikolas Rieble
1
@NikolasRieble Właśnie napisałem odpowiedź na oryginalne pytanie, a także umieściłem twoje pytanie w odpowiedzi
Dennis Soemers

Odpowiedzi:

15

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:

  1. 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.

  2. 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.

  3. 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:

  1. 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 .

  2. 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

Dennis Soemers
źródło
1
Czy możesz również podać referencje?
Nikolas Rieble
1
W tym poście znajduje się kilka zdjęć dobrze znanej książki: nodalpoint.com/not-perform-feature-selection . Te wydają się zgadzać z moim „możliwym rozwiązaniem 1”. Nie mam odniesienia do innego przypadku, oprócz ... siebie?
Podałem
1
Ten rozdział ESL powinien być w 100% wymagany dla każdego modelisty predykcyjnego.
Matthew Drury
Jeśli chodzi o soln 1, jak uzyskać ostateczny zestaw funkcji i hiperparametry modelu po uruchomieniu wyboru funkcji (fs) i optymalizacji hiperparamu (ho) w kilku iteracjach cv? Ponadto, kiedy wykonujemy je w iteracji cv, czy najpierw uruchamiamy fs, a następnie używamy tych funkcji?
sma
1
@skim CV jest zwykle używane tylko w celu uzyskania dobrego oszacowania wydajności. Zwykle nie zaczynasz bezpośrednio używać żadnego z modeli wytrenowanych w jednym z zestawów foldów. Jeśli ocenisz, że wydajność oszacowana na podstawie CV jest zadowalająca, ponownie uruchom kompletny potok na pełnym zbiorze danych szkoleniowych (w tym ponownie wybór funkcji i strojenie hiperparamu). Zestaw funkcji + hiperparamy + model, który otrzymujesz, jest tym, co umieścisz „w produkcji”K1
Dennis Soemers,
4

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ą

MathIsKey
źródło
0

@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 resampledo opisania foldzestawu danych, ale wydaje się fold, że dominującym terminem na StackExchange jest , więc użyję tego terminu foldponiż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:

-> Split data into train and test sets.
-> For each external fold of train set:
    -> Select feature subset.
    -> Split into external train and test sets.

    -> For each internal fold of external train set:
        -> Split into internal train and test sets.
        -> Perform hyperparameter tuning on the internal train set. Note that this
           step is another level of nesting in which the internal train set is split
           into multiple folds and different hyperparameter sets are trained and tested on
           different folds.
    -> Examine the performance of the best hyperparameter tuned model 
       from each of the inner test folds. If performance is consistent, redo 
       the internal hyperparameter tuning step on the entire external train set.
    -> Test the model with the best hyperparameter set on the external test set.

-> Choose the feature set with the best external test score.
-> Retrain the model on all of the training data using the best feature set 
   and best hyperparameters for that feature set. 

wprowadź opis zdjęcia tutaj Zdjęcie z rozdziału 11.2: Proste filtry

-> Select feature subsetKrok 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

-> Split data into hyperameter_train, feature_selection_train, and test sets.

-> Select a reasonable subset of features using expert knowledge.

-> Perform nested cross validation with the initial features and the 
   hyperparameter_train set to find the best hyperparameters as outlined in option 1.

-> Use the best hyperparameters and the feature_selection_train set to find 
   the best set of features. Again, this process could be nested cross 
   validation or not, depending on the computational cost that it would take 
   and the cost that is tolerable.

Oto jak Kuhn i Johsnon frazują ten proces:

Łącząc globalną metodę wyszukiwania z modelem, który ma parametry dostrajania, zalecamy, jeśli to możliwe, najpierw zestaw funkcji, korzystając z wiedzy eksperckiej na temat problemu. Następnie ważne jest określenie rozsądnego zakresu wartości parametrów strojenia. Jeśli dostępna jest wystarczająca liczba próbek, część z nich można podzielić i wykorzystać do znalezienia zakresu potencjalnie dobrych wartości parametrów przy użyciu wszystkich funkcji. Wartości parametrów strojenia mogą nie być idealnym wyborem dla podzbiorów cech, ale powinny być dość skuteczne w poszukiwaniu optymalnego podzbioru.

Rozdział 12.5: Globalne metody wyszukiwania

skeller88
źródło
-1

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.

THN
źródło
Masz na myśli, że próbuje, dopóki to nie zadziała: D
Grunwalski,
Próbowanie w procedurze ML, nie losowo. W rzeczywistości ML to hacking sam w sobie.
THN