Mam trochę samouczącej się wiedzy związanej z algorytmami uczenia maszynowego (podstawowe rzeczy typu Losowy Las i Regresja Liniowa). Postanowiłem rozgałęzić się i zacząć uczyć RNN z Keras. Patrząc na większość przykładów, które zwykle wiążą się z prognozami giełdowymi, nie znalazłem żadnych podstawowych przykładów implementacji wielu funkcji innych niż 1 kolumna będąca datą funkcji, a druga to wynik. Czy brakuje mi kluczowej fundamentalnej rzeczy?
Jeśli ktoś ma przykład, byłbym bardzo wdzięczny.
Dzięki!
machine-learning
neural-network
keras
Rjay155
źródło
źródło
multiple features
tutaj bardziej szczegółowe pytanie o tym, jak używać RNN do prognoz szeregów czasowych z funkcjami zawierającymi dane liczbowe i dane nienumeryczne?Odpowiedzi:
Rekurencyjne sieci neuronowe (RNN) są zaprojektowane do uczenia danych sekwencji. Jak się domyślacie, zdecydowanie mogą one przyjmować wiele funkcji! RNN Keras pobierają dane 2D ( T , F ) kroków czasu T i funkcje F (tutaj ignoruję wymiar wsadowy).
Jednak nie zawsze potrzebujesz lub nie potrzebujesz pośrednich kroków czasowych, t = 1, 2 ... ( T - 1). Dlatego Keras elastycznie obsługuje oba tryby. Aby wyprowadził wszystkie T timepeps, przekaż
return_sequences=True
do swojego RNN (np.LSTM
LubGRU
) na budowie. Jeśli chcesz tylko ostatniego pomiaru czasu t = T , użyjreturn_sequences=False
(jest to ustawienie domyślne, jeśli nie przejdzieszreturn_sequences
do konstruktora).Poniżej znajdują się przykłady obu tych trybów.
Przykład 1: Nauka sekwencji
Oto szybki przykład szkolenia LSTM (typ RNN), który utrzymuje całą sekwencję. W tym przykładzie każdy punkt danych wejściowych ma 2 kroki czasowe, każdy z 3 funkcjami; dane wyjściowe mają 2 przedziały czasowe (ponieważ
return_sequences=True
), każdy z 4 punktami danych (ponieważ jest to rozmiar, który przekazujęLSTM
).Przykład 2: Nauka ostatniego pomiaru czasu
Z drugiej strony, jeśli chcesz wyszkolić LSTM, który generuje tylko ostatni timepep w sekwencji, musisz ustawić
return_sequences=False
(lub po prostu całkowicie usunąć go z konstruktora, ponieważFalse
jest to ustawienie domyślne). A następnie dane wyjściowe (data_y
w powyższym przykładzie) muszą zostać uporządkowane, ponieważ wystarczy podać tylko ostatni czas. Tak więc w tym drugim przykładzie każdy punkt danych wejściowych nadal ma 2 przebiegi czasowe, każdy z 3 funkcjami. Dane wyjściowe są jednak tylko pojedynczym wektorem dla każdego punktu danych, ponieważ spłaszczyliśmy wszystko do pojedynczego pomiaru czasu. Każdy z tych wektorów wyjściowych ma jednak nadal 4 cechy (ponieważ taki rozmiar przekazujęLSTM
).źródło
data_x
po prostu zawierałby jeden punkt danych, a ten punkt danych miałby cztery kroki czasowe, każdy z 3 wymiarów (i podobnie, musiałbyś scalićdata_y
w ten sam sposób). Liczba używanych kroków czasowych zależy po prostu od tego, co próbujesz wymodelować (oraz ile kroków czasowych jest odpowiednich dla tego procesu).