Dodaj wpis w tym temacie
Spis tematów | Strona: 1 2 ... 9 10 11 12 13 Wyślij wiadomość do admina |
Przewiń wpisy ↓ | Jaki program do tworzenia sieci neuronowych wybrać na początek? |
2010-12-07 (13:48)![]() Data rejestracji: 2010-11-17 00:00:00 Ilość postów: 1960 ![]() | wpis nr 379 503 [ CZCIONKA MONOSPACE ] krzysi Forumowicz Adalbert doskonale zna matlaba. |
2010-12-09 (11:22)![]() Data rejestracji: 2009-03-19 00:00:00 Ilość postów: 675 ![]() | wpis nr 380 088 [ CZCIONKA MONOSPACE ] Krzysi, W toolbox (ntstool, nntool) możesz zbudować sieć wykorzystując istniejące funkcje. Po zakończeniu trenowania i testowania sieci zapisujesz pod dowolną nazwą cały algorytm sieci w postaci funkcji. Teraz tą funkcję wywołujesz z poziomu pisanego przez Ciebie programu. Wynikiem działania funkcji jest prognoza (predict, forecast). Przykład: %% usunięcie zmiennych, wyzerowanie obszaru pamięci, czyszczenie ekranu itd. clc; clear global clear memory clear all close all echo off warning(\'off\') format long rand(\'seed\',10000); %% proste menu programu fprintf(\'Wybierz grę, dla której program ma wykonać prognozę kolejnego losowania:\\n\'); fprintf(\' 1 - MultiMulti\\n\'); fprintf(\' 2 - Lotto\\n\'); fprintf(\' 3 - MiniLotto\\n\'); fprintf(\' 4 - 49s\\n\'); wybor=input(\'Które losowanie wybierasz? ...\'); %% odczytanie archiwalnych losowań wybranej gry Totalizatora [wyniki_sort, archiwum]=czytaj_archiwum(wybor);%funkcja napisana przez mnie wyniki=archiwum(end-100:end-1,:); wyniki=wyniki\'; wyniki=wyniki(:); ile_wylosowano=size(wyniki,1); %% obliczenie prawdopodobieństwa1 zakres=max(wyniki); [prwd,czest]=oblicz_prawd(wyniki,zakres);%funkcja napisana przez mnie czest_ostatnie=czest(end,:); czest_kolejne=czest_ostatnie+1; rozmiar=size(archiwum,2); prwd_sum=cumsum(prwd); poczatek=ones(1,size(prwd_sum,2)); for ktore=1:size(prwd_sum,2) for a=1:size(prwd_sum,1) if prwd_sum(a,ktore)==0 poczatek(1,ktore)=poczatek(1,ktore)+1; end end end przesuniecie=2; hidden=40; ile=200; method=\'fb\'; k=20; order=6; %% obliczenie nowego sumowanego prwd % wywołanie sieci neuronowej typu NIO; for ktore=1:size(prwd_sum,2) dane=prwd_sum(end-ile:end,ktore); for kolejne=1:20 x=dane(1:end-1,1); y=dane(2:end,1); %% sieć NIO yf = sn_nio(x,y,hidden, przesuniecie); %sieć zwraca liczbę, która jest właśnie tą prognozą nowa_czest(kolejne,ktore)=round((yf(1,end)-dane(end,1))*(ile_wylosowano+kolejne)); dane(end+1,1)=yf(1,end); end end zestaw2=zeros(size(nowa_czest,1),size(nowa_czest,2)) licznik1=1; for lw=1:size(nowa_czest,1) licznik2=1; for lk=1:size(nowa_czest,2) if (nowa_czest(lw,lk)-1)==czest_ostatnie(1,lk) zestaw2(licznik1,licznik2)=lk; licznik2=licznik2+1; end end licznik1=licznik1+1; end prognoza2=wybieraj(zestaw)%funckja napisana przez mnie A tu jest funkcja sn_nio function wynik=sn_nio(x,y,hiddenLayerSize, przesuniecie) inputSeries = tonndata(x,false,false); targetSeries = tonndata(y,false,false); inputDelays = 1:przesuniecie; net = timedelaynet(inputDelays,hiddenLayerSize); net.inputs{1}.processFcns = {\'removeconstantrows\',\'mapminmax\'}; net.outputs{2}.processFcns = {\'removeconstantrows\',\'mapminmax\'}; [inputs,inputStates,layerStates,targets] = preparets(net,inputSeries,targetSeries); net.divideFcn = \'dividerand\'; % Divide data randomly net.divideMode = \'time\'; % Divide up every value net.divideParam.trainRatio = 70/100; net.divideParam.valRatio = 15/100; net.divideParam.testRatio = 15/100; net.trainFcn = \'trainlm\'; % Levenberg-Marquardt net.performFcn = \'mse\'; % Mean squared error net.plotFcns = {\'plotperform\',\'plottrainstate\',\'plotresponse\', ... \'ploterrcorr\', \'plotinerrcorr\'}; [net,tr] = train(net,inputs,targets,inputStates,layerStates); outputs = net(inputs,inputStates,layerStates); nets = removedelay(net); [xs,xis,ais,ts] = preparets(nets,inputSeries,targetSeries); ys = nets(xs,xis,ais); yss=cell2mat(ys); wynik=yss(1,end); |
2010-12-09 (12:56)![]() Data rejestracji: 2010-12-07 00:00:00 Ilość postów: 7 ![]() | wpis nr 380 115 [ CZCIONKA MONOSPACE ] Adalbert, ja już się trochę bawiłem ntstool, ale nie rozumiem co na końcu oznaczają te linie nets = removedelay(net); [xs,xis,ais,ts] = preparets(nets,inputSeries,targetSeries); ys = nets(xs,xis,ais); yss=cell2mat(ys); wynik=yss(1,end); za co one odpowiadają, co np. przechowuje zmienna ys? czy przechowuje ona przyszłe wartości? która zmienna przechowuje przyszłe wartości? czemu np też dodałeś yss? jak bys mi mógł to objaśnić, będę Ci wdzięczny, Pozdrawiam, krzysi |
2010-12-09 (13:56)![]() Data rejestracji: 2009-03-19 00:00:00 Ilość postów: 675 ![]() | wpis nr 380 132 [ CZCIONKA MONOSPACE ] Krzysi wszystko masz w Helpie Matlaba. Chyba nie ma sensu, żebym przepisywał na tym forum z helpa informacje. |
2010-12-09 (16:48)![]() Data rejestracji: 2009-03-19 00:00:00 Ilość postów: 675 ![]() | wpis nr 380 188 [ CZCIONKA MONOSPACE ] Zastosowałem sieć typu timedelaynet. Sieć ta w swojej strukturze uwzględnia parametr nazywany przesunięciem odpowiedzi sygnału wyjścioweg o(targets) na zmiany sygnału wejściowego Inputs. W moich obliczeniach przesuniecie to wynosi 2, ponieważ o tyle względem siebie przesunięte są Inputs i Targets Załóżmy, ze: inputSeries= [1,2, 3, 4,5,6,7,8,9,10] targetSeries=[2,3,4,5,6,7,8,9,10,11] Przesunięcie wynosi 2 Gdyby np. do sieci podstawić: inputSeries =[1,2,3,4,5,6,7,8,9,10] targetSeries [11,12,13,14,15,16,17,18,19,20] Wtedy przesunięcie wynosiłoby 11. removedelay – funkcja, która dokonuje następujących czynności: - podstawia: inputSeries= targetSeries targetSeries= [3,4,5,6,7,8,9,10, 11,Xn+1] gdzie Xn+1 jest wartością, która będzie właśnie prognozowana, czyli jest nieznana - usuwa przesunięcie Funkcja preparets przygotowuje inputSeries i targetSeries w postaci serii czasu z przesunięciem, które zostało wcześniej zdefiniowane. Zmienne: xs=[4,5,6,7,8,9,10,11] xis=[3] ais – tablica o rozmiarze [przesuniecie,0] ts=[5,6,7,8,9,10,11,Xn+1] teraz następuje prognozowanie z wykorzystaniem sieci o nazwie nets. Nazwa jest dowolna zdefiniowana w tym miejscu: nazwa_sieci=removedelay(net) Prognozowanie: ys = nazwa_sieci(xs,xis,ais); Zmienna ys jest wynikiem prognozy i zawiera ys=[5,6,7,8,9,10,11,12], gdzie ostatnia liczba 12 jest tą, która przez sieć została wyznaczona. Ponieważ ys (wynik prognozy) jest zmienną typu Cell przy pomocy funkcji cell2mat następuje zamiana na ciąg liczb, czyli yss=5,6,7,8,9,10,11,12. Teraz do zmiennej wynik podstawiana jest ostatnia liczba zmiennej yss, czyli 12, która jest prognozą wykonaną przez sieć Nazwy net, nets, ys, yss, inputSeries, targetSeries, nhidden to nazwy zmiennych, które można dowolnie zdefiniować: Np. siec_z_przesunieciem, siec_bez_przesuniecia, caly_wynik_prognozy_w_postaci_cell caly_wynik_prognozy_w_postaci_liczbowej dane_wejsciowe dane_wyjsciowe liczba_neuronow Mam nadzieję, że udało mi się odpowiedzieć na pytania. |
2010-12-16 (12:43)![]() Data rejestracji: 2010-12-07 00:00:00 Ilość postów: 7 ![]() | wpis nr 382 614 [ CZCIONKA MONOSPACE ] @Adalbert dzięki za wcześniejsze wytłumaczenie działania sieci. Czy wszystkie wartości zawarte w macierzy ys są prognozami, czy tylko ostania wartość w ys jest wartością prognozowaną? Np. jeśli xs=[x1,x2,x3,x4,x5], a ys=[y1,y2,y3,y4,y5], przy czym y5 to jest ta wartość przewidywana na przyszłość (na jutro), to czy np. y2 (jak i pozostałe wartości z ys) jest jakąś prognozą na podstawie wartości z xs? |
2010-12-16 (13:01)![]() Data rejestracji: 2009-03-19 00:00:00 Ilość postów: 675 ![]() | wpis nr 382 617 [ CZCIONKA MONOSPACE ] krzysi To zależy od konfiguracji sieci. W tym przypadku Wszystkie wartości zawarte w zmiennej ys są obliczone przez sieć, przy czym ostatnia wartość, to ta, która jest prognozą przyszłego zdarzenia. |
2010-12-16 (14:40)![]() Data rejestracji: 2010-12-07 00:00:00 Ilość postów: 7 ![]() | wpis nr 382 655 [ CZCIONKA MONOSPACE ] @Adalbert w przypadku takiej konfiguracji sieci targetSeries = DANE; feedbackDelays = 1:2; hiddenLayerSize = 10; net = narnet(feedbackDelays,hiddenLayerSize); net.inputs{1}.processFcns = {\'removeconstantrows\',\'mapminmax\'}; [inputs,inputStates,layerStates,targets] = preparets(net,{},{},targetSeries); net.divideFcn = \'dividerand\'; % Divide data randomly net.divideMode = \'time\'; % Divide up every value net.divideParam.trainRatio = 70/100; net.divideParam.valRatio = 15/100; net.divideParam.testRatio = 15/100; net.trainFcn = \'trainlm\'; % Levenberg-Marquardt net.performFcn = \'mse\'; % Mean squared error net.plotFcns = {\'plotperform\',\'plottrainstate\',\'plotresponse\', ... \'ploterrcorr\', \'plotinerrcorr\'}; [net,tr] = train(net,inputs,targets,inputStates,layerStates); outputs = net(inputs,inputStates,layerStates); errors = gsubtract(targets,outputs); performance = perform(net,targets,outputs) trainTargets = gmultiply(targets,tr.trainMask); valTargets = gmultiply(targets,tr.valMask); testTargets = gmultiply(targets,tr.testMask); trainPerformance = perform(net,trainTargets,outputs) valPerformance = perform(net,valTargets,outputs) testPerformance = perform(net,testTargets,outputs) view(net) netc = closeloop(net); [xc,xic,aic,tc] = preparets(netc,{},{},targetSeries); yc = netc(xc,xic,aic); perfc = perform(net,tc,yc) nets = removedelay(net); [xs,xis,ais,ts] = preparets(nets,{},{},targetSeries); ys = nets(xs,xis,ais); closedLoopPerformance = perform(net,tc,yc) i chodzi mi o to, że jeśli mamy xs=[x1,x2,x3,x4,x5], a ys=[y1,y2,y3,y4,y5], to czy np y3 też było przewidywaniem wartości, na podstawie tych co wystąpiły wcześniej? Czyli, czy jeśli y3 wystąpił w pewnym okresie czasu działania programu, to czy wtedy obliczenie go też był prognozą? A w późniejszych iteracjach program dalej obliczał/przewidywał kolejne wartości y4 i y5. |
2010-12-16 (17:26)![]() Data rejestracji: 2009-03-19 00:00:00 Ilość postów: 675 ![]() | wpis nr 382 703 [ CZCIONKA MONOSPACE ] krzysi W Matlabie możesz śledzić działanie programu krok po kroku. Ustaw kursor w tej linii programu, od którego to miejsca chcesz debugować skrypt i naciśnij F12. Uruchom program, jego działanie zatrzyma się w miejscu, gdzie jest ta czerwona kropka. Teraz naciskając F10 będziesz wykonywać linia po linii kod programu i w każdej chwili możesz \"podejrzeć\" każdą ze zmiennych. Naciskając F11 w przypadku zewnętrznych funkcji wywoływanych z poziomu Twojego programu debuger przechodzi do \"wnętrza\" tej funkcji i wtedy można zobaczyć wartości zmiennych, które są zmiennymi lokalnymi tej funkcji. W ten sposób bez problemu znajdziesz odpowiedź na postawione pytania. Mam nadzieję, że pomogłem. Pozdrawiam Adalbert |
2010-12-19 (11:29)![]() Data rejestracji: 2010-12-07 00:00:00 Ilość postów: 7 ![]() | wpis nr 383 598 [ CZCIONKA MONOSPACE ] Po wielu chwilach poświęconych nad tym problemem, doszedłem do wniosku, że wszystkie wartości ys są odpowiedzialne za przewidywanie odpowiadających im wartości xs. Czyli np przedostania wartość w macierzy ys przewiduje ostatnią wartość w macierzy xs. |
2010-12-19 (16:55)![]() Data rejestracji: 2010-12-14 00:00:00 Ilość postów: 8 ![]() | wpis nr 383 701 [ CZCIONKA MONOSPACE ] Czy ktoś już ktoś testował i wie jak skuteczny jest Prognzer v1 Adalberta ? Sprawa ucichła. Adalbert - mógłbyś wrzucić aktualnego linka do prognozera ? Bo ten wcześniejszy na spendspace jest już nieaktualny. Łącznie z tym zaktualizowanym plikiem Prognozer_v1.m. Dzięki z góry. |
2010-12-19 (18:05)![]() Data rejestracji: 2009-03-19 00:00:00 Ilość postów: 675 ![]() | wpis nr 383 720 [ CZCIONKA MONOSPACE ] Kamilu, nie wrzucę linka, bo już tej wersji prognozera nie ma. Wprowadziłem tyle zmian w programie, że nawet trudno byłoby odtworzyć wersję pierwotną. Na razie prognozuję liczby w innym temacie. |
2010-12-19 (22:21)![]() Data rejestracji: 2010-12-14 00:00:00 Ilość postów: 8 ![]() | wpis nr 383 825 [ CZCIONKA MONOSPACE ] Będę czekać zatem, ciekaw jestem co z tego wyjdzie. |
2010-12-21 (16:07)![]() Data rejestracji: 2010-12-07 00:00:00 Ilość postów: 7 ![]() | wpis nr 384 330 [ CZCIONKA MONOSPACE ] @Adalbert zająłem się teraz prognozowaniem giełdy poprzez sieci neuronowe (wiem, że to forum nie służy do tego, ale widzę, że tutaj natrafiłem na kompetentną osobę i przepraszam, że umieszczam wpis na tym forum, ale to też jest szereg czasowy, więc mam nadzieję, że ta wiedza się również przyda któremuś z forumowiczów) w tym toolboxie w matlabie. Wiesz może jak zmodyfikować ten program aby liczył kilka dni do przodu. % % RSI_WIG20 - input time series. % WIG20 - feedback time series. inputSeries = USDPLN; targetSeries = WIG20; % Create a Nonlinear Autoregressive Network with External Input inputDelays = 1:10; feedbackDelays = 1:10; hiddenLayerSize = 10; net = narxnet(inputDelays,feedbackDelays,hiddenLayerSize); net.inputs{1}.processFcns = {\'removeconstantrows\',\'mapminmax\'}; net.inputs{2}.processFcns = {\'removeconstantrows\',\'mapminmax\'}; [inputs,inputStates,layerStates,targets] = preparets(net,inputSeries,{},targetSeries); net.divideFcn = \'dividerand\'; % Divide data randomly net.divideMode = \'value\'; % Divide up every value net.divideParam.trainRatio = 70/100; net.divideParam.valRatio = 15/100; net.divideParam.testRatio = 15/100; net.trainFcn = \'trainlm\'; % Levenberg-Marquardt net.performFcn = \'mse\'; % Mean squared error net.plotFcns = {\'plotperform\',\'plottrainstate\',\'plotresponse\', ... \'ploterrcorr\', \'plotinerrcorr\'}; % Train the Network [net,tr] = train(net,inputs,targets,inputStates,layerStates); % Test the Network outputs = net(inputs,inputStates,layerStates); errors = gsubtract(targets,outputs); performance = perform(net,targets,outputs) % Recalculate Training, Validation and Test Performance trainTargets = gmultiply(targets,tr.trainMask); valTargets = gmultiply(targets,tr.valMask); testTargets = gmultiply(targets,tr.testMask); trainPerformance = perform(net,trainTargets,outputs) valPerformance = perform(net,valTargets,outputs) testPerformance = perform(net,testTargets,outputs) view(net) % Plots %figure, plotperform(tr) %figure, plottrainstate(tr) %figure, plotregression(targets,outputs) %figure, plotresponse(targets,outputs) %figure, ploterrcorr(errors) %figure, plotinerrcorr(inputs,errors) % Closed Loop Network % Use this network to do multi-step prediction. % The function CLOSELOOP replaces the feedback input with a direct % connection from the outout layer. netc = closeloop(net); netc.name = [net.name \' - Closed Loop\']; view(netc) [xc,xic,aic,tc] = preparets(netc,inputSeries,{},targetSeries); yc = netc(xc,xic,aic); closedLoopPerformance = perform(netc,tc,yc) % Early Prediction Network % For some applications it helps to get the prediction a timestep early. % The original network returns predicted y(t+1) at the same time it is given y(t+1). % For some applications such as decision making, it would help to have predicted % y(t+1) once y(t) is available, but before the actual y(t+1) occurs. % The network can be made to return its output a timestep early by removing one delay % so that its minimal tap delay is now 0 instead of 1. The new network returns the % same outputs as the original network, but outputs are shifted left one timestep. nets = removedelay(net); nets.name = [net.name \' - Predict One Step Ahead\']; view(nets) [xs,xis,ais,ts] = preparets(nets,inputSeries,{},targetSeries); ys = nets(xs,xis,ais); earlyPredictPerformance = perform(nets,ts,ys) |
2010-12-21 (17:16)![]() Data rejestracji: 2009-03-19 00:00:00 Ilość postów: 675 ![]() | wpis nr 384 354 [ CZCIONKA MONOSPACE ] Krzysi. W Matlabie do potrzeb prognozowania giełdy, finansów jest specjalnie przygotowany pakiet pod nazwą Financial Toolbox i Financial Derivatives Toolbox. Bardzo dużo informacji na ten temat znajdziesz w zasobach internetu, Help Matlaba dot. tych pakietów ma dużo konkretnych przykładów. Poza tym na stronie http://www.hackchina.com (trzeba tylko wybrać wersję angielską) znajdziesz gotowe przykłady wykorzystania Matlaba do prognozowania giełdy. Szukaj kodów programów zawierających kluczowe wyrazy: garch, garchsim, ugarchpred, ugarchsim, predict, forecast, chaotic time series itp. Są również gotowe modele do prognozowania gier totalizatora. Można z nich coś wybrać i testować. Dość ciekawe podejście do prognoz lotka znajdziesz na hackchina wpisując \"caipiao\" lub \"caientropy\". Jeżeli masz jakieś pytania pisz do mnie na lottopedia@gmail.com podsyłając gotowy kod programu, jak też pliki z danymi. Trudno mi jest analizować kod programy, jeżeli nie wiem, jak, w jaki sposób przygotowane zostały dane wejściowe InputSeries = USDPLN; targetSeries = WIG20 Tyle na razie. Pozdrawiam Adalbert |
2012-05-26 (16:43)![]() Data rejestracji: 2011-12-22 00:00:00 Ilość postów: 137 ![]() | wpis nr 528 142 [ CZCIONKA MONOSPACE ] dostajecie jakieś dobre prognozy programami opartymi na sieciach neuronowych? , bo ja już sprawdziłem kilka programów i lipne są te prognozy ;-( albo coś źle robie? moim zdaniem do lotto sie nie nadaja ;-((( |
2012-05-26 (19:24)![]() Data rejestracji: 2011-12-22 00:00:00 Ilość postów: 137 ![]() | wpis nr 528 171 [ CZCIONKA MONOSPACE ] na dzisiejsze losowanie o 22;00 sieć zaprognozowała mi: 2,13,24,35,46 1,12,23,34,45 |
2012-05-26 (22:04)![]() Data rejestracji: 2008-11-02 00:00:00 Ilość postów: 10155 ![]() | wpis nr 528 235 [ CZCIONKA MONOSPACE ] chyba źle... i wiem co źle nawet. |
2012-05-27 (12:57)![]() Data rejestracji: 2011-12-22 00:00:00 Ilość postów: 137 ![]() | wpis nr 528 354 [ CZCIONKA MONOSPACE ] na dzisiejsze losowanie o 14;00 sieć zaprognozowała mi: 2,13,24,35,46 1,12,23,34,45 3,14,25,36,58 |
2012-05-27 (20:33)![]() Data rejestracji: 2011-12-22 00:00:00 Ilość postów: 137 ![]() | wpis nr 528 478 [ CZCIONKA MONOSPACE ] na dzisiejsze losowanie o 22;00 sieć zaprognozowała mi: 2,13,24,35,46 1,12,23,34,45 3,14,25,36,58 9.18,27,36.45 |
| Dodaj wpis w tym temacie | Spis tematów | Wyniki lotto | Strona: 1 2 ... 9 10 11 12 13 Wyślij wiadomość do admina |