2016-10-06 15 views
7

Próbuję się bawić prostymi prognozami szeregów czasowych. Biorąc pod uwagę liczbę wejść (1Min ticks) Net powinien próbować przewidzieć następny. Trenowałem 3 sieci z różnymi ustawieniami do zilustrowania mój problem:Proste szkolenie z serii czasowej MLP daje nieoczekiwane wyniki średniej linii

enter image description here

Po prawej stronie można zobaczyć 3 trener MLP firmy - losowo nazwane i kolorami, a niektóre statystyki szkoleniowych. Po lewej - wykres przewidywań dokonanych przez te sieci i rzeczywiste dane walidacyjne w kolorze białym. Ten wątek został wykonany poprzez przejrzenie każdego tiku danych walidacyjnych (biały), karmienie 30 | 4 | 60 (Nancy | Kathy | Wayne) poprzednimi kleszczami do sieci i wykreślenie, co będzie przewidywać na miejscu aktualnego kleszcza.

ustawienia

perceptron wielowarstwowy'S (Nancy | Ustawienia Wayne | Kathy):

Geometria: 2x30 | 4 | 60 węzły wejściowe -> 30 | 4 | 60 ukrytych węzłów warstwy -> 2 wyjścia
Ilość epok: 10 | 5 | 10
szybkość uczenia: 0.01
Momentum: 0,5 | 0,9 | 0,5
Nieliniowość: Usunąć
strata: Squared Error

wydaje się, że ze zastosowano więcej szkoleń - prognozy są zbieżne w niektórych rodzaj średniej linii, której nie oczekiwałem w ogóle. Spodziewałem się, że prognozy będą nieco zbliżyć się do danych walidacyjnych z pewnym marginesem błędu.
Czy wybieram niewłaściwy model, nieporozumienie niektórych podstawowych koncepcji uczenia maszynowego lub robienie czegoś złego w lasagne/theano?

Szybkie linki do najbardziej istotnych (moim zdaniem) części kodu:

A oto pełne mniej lub bardziej, źródła:

Odpowiedz

2

Przede wszystkim chcę polecić Państwu zastosowanie prostownika nieliniowego. Zgodnie z tym, co według Geoffrey'a Hintona wynalazcy maszyny Boltzmann, prostownik nieliniowy jest najlepszym stopniem dla czynności ludzkiego mózgu.

Ale dla innych części, które wybrałeś, proponuję zmienić architekturę NN. Dla przewidywań rynku akcji powinieneś użyć kilku powtarzających się NN: najłatwiejszymi kandydatami mogą być sieci Elman lub Jordan. Lub możesz spróbować bardziej skomplikowanych, takich jak LSTM sieci.

Inna część porad, proponuję zmodyfikować to, co karmisz w NN. Ogólnie zalecam stosowanie skalowania i normalizacji.Na przykład nie podawaj surowej ceny NN. Zmodyfikuj go w jeden z następujących sposobów (te propozycje nie są napisane w kamieniu): 1. podaj w procentach NN zmiany ceny. 2. Jeśli podajesz wartości NN 30 i chcesz przewidzieć dwie wartości, odejmij od 30 + 2 wartości minimum wszystkich 32 wartości i spróbuj przewidzieć 2 wartości, ale w oparciu o 30. Następnie po prostu dodaj, aby uzyskać minimum 32 wartości.

Nie podawaj tylko dat w NN. Mówi NN nic o robieniu prognoz. Zamiast tego podaj datę i godzinę NN jako wartość kategoryczną. Kategoria oznacza, że ​​przekształcasz datetime w więcej niż jeden wpis. Na przykład zamiast podając NN 2016/09/10 możesz rozważyć niektóre z poniższych.

  1. rok handlu najprawdopodobniej nie poda żadnych użytecznych informacji. Więc możesz pominąć rok handlu.
  2. 09 oznacza liczbę miesięcy lub około września. Masz wybór, czy chcesz podawać numer NN miesiąca, ale zdecydowanie zalecam wprowadzić 12 wejść w NN, aw przypadku stycznia dać najpierw NN wejście 1 i zera dla pozostałych jedenaście. W ten sposób będziesz trenować swoją sieć w oddzielnym okresie handlu w styczniu, od czasu handlu w czerwcu lub grudniu. Proponuję również kategoryczne wejście dnia tygodnia w ten sam sposób. Ponieważ handel w poniedziałek różni się od handlu w piątek, szczególnie w dniu NFP.
  3. Przez wiele godzin proponuję kodowanie w odstępach 6 - 8 godzin. Pomoże Ci to w szkoleniu sieci w celu uwzględnienia różnych sesji handlowych: Azji, Frankfurtu, Londynu, Nowego Jorku.
  4. Jeśli zdecydujesz się zasilić NN niektóre wskaźniki, to dla niektórych wskaźników należy uwzględnić kodowanie termometru. Jak zwykle kodowanie termometru jest potrzebne dla wskaźników takich jak ADX.

Zgodnie z twoim pytaniem w komentarzach dotyczących sposobu użycia minimum, podam uproszczony przykład. Załóżmy, że chcesz użyć do szkolenia NN po cenach bliskich dla eur/usd:
1.1122, 1.1132, 1.1152, 1.1156, 1.1166, 1.1173, 1.1153, 1.1150, 1.1152, 1.1159. Zamiast rozmiaru okna do nauki 30 pokażę uczenie się z rozmiarem okna 3 (tylko dla uproszczenia sake) i wielkości okna prognozy 2.
Łącznie dane używane do przewidywania są równe 3. Wynik będzie wynosił 2. Do nauki będziemy użyciu pierwszych 5 wartości, czyli
1,1122, 1,1132, 1,1152, 1,1156, 1,1166
następnie kolejne 5 wartości lub:
1,1132, 1,1152, 1,1156, 1,1166, 1,1173
w pierwszym oknie wartości minimalnej jest: 1,1122.
Następnie odejmij 1.1122 od każdej wartości:
0, 0,002, 0,003, 0,0033, 0,0034. Jako dane wejściowe podajemy NN 0, 0,002, 0,003. Jako wynik NN oczekujesz 0.0033, 0.0034. Jeśli chcesz, aby uczył się on dużo szybciej, używaj wartości znormalizowanych i skalowanych NN. Następnie za każdym razem będziesz musiał dokonać normalizacji i usunięcia skal wejściowych.

Innym sposobem jest podawanie w procentach NN zmian cen. Daj mi znać, jeśli potrzebujesz próbki do tego.

I jeszcze jedna ważna rada. Nie używaj tylko NN do dokonywania transakcji. Nigdy!!! Lepszym sposobem na zrobienie tego jest wymyślenie jakiegoś systemu z pewnym procentem sukcesu. Na przykład 30%. Następnie użyj NN, aby zwiększyć procent powodzenia sukcesu do 60%.

Chcę również podać dla ciebie przykład kodowania termometru dla niektórych wskaźników.Rozważyć wskaźnik ADX następujące przykłady.

a> 10> 20> 30> 40
b. > 10> 20> 30> 40
Przykład stanowi materiał w NN z ADX większym niż 10. Przykład B zawiera wejście w NN z ADX większym niż 20.
można zmodyfikować kodowania termometr dostarczanie danych wejściowych dla stochastycznych. Jak zwykle stochastyczna ma znaczenie w zakresie od 0 do 20 i od 80 do 100, aw rzadkich przypadkach w zakresie od 20 do 80. Ale jak zwykle możesz spróbować zobaczyć.

+0

Dzięki :) Tak, mam wiele razy więcej czasu na wykorzystanie powtarzającego się, ale postanowiłem spróbować czegoś bardziej "podstawowego" na początek. Więc z twojej odpowiedzi wynika, że ​​MLP zachowuje się zgodnie z oczekiwaniami z tą średnią linią, biorąc pod uwagę dane, które karmię? 2. Nie rozumiem, co masz na myśli przez to odjęcie minimum ... co najmniej? Może to tylko jego sformułowanie, ale czy możesz wyjaśnić to nieco więcej szczegółów? 3. W rzeczywistości nie dostarczam żadnych dat do NN, tylko do serii cen. Dane treningowe wyniosły tylko 1M kleszczy z września. Nie jestem pewien, czy jest jakiś punkt w dostarczaniu danych z lat –

+0

Btw, dobre strony dotyczące czasu kodowania, brzmi całkiem logicznie, zdecydowanie spróbuję, jak tylko otrzymam conajmniej trochę bardziej znaczący niż średnia linia z prostszym Model. –

+0

Max Yari, proszę spojrzeć na zaktualizowaną odpowiedź –

Powiązane problemy