Forum strony www.multipasko.pl [Regulamin]


Dodaj wpis w tym temacie
Spis tematów
Login:

Hasło:
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)

status spook
Data rejestracji: 2010-11-17 00:00:00
Ilość postów: 1960

12741
wpis nr 379 503
[ CZCIONKA MONOSPACE ]

krzysi

Forumowicz Adalbert doskonale zna matlaba.
2010-12-09 (11:22)

status Adalbert
Data rejestracji: 2009-03-19 00:00:00
Ilość postów: 675

4335
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)

status krzysi
Data rejestracji: 2010-12-07 00:00:00
Ilość postów: 7

12781
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)

status Adalbert
Data rejestracji: 2009-03-19 00:00:00
Ilość postów: 675

4335
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)

status Adalbert
Data rejestracji: 2009-03-19 00:00:00
Ilość postów: 675

4335
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)

status krzysi
Data rejestracji: 2010-12-07 00:00:00
Ilość postów: 7

12781
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)

status Adalbert
Data rejestracji: 2009-03-19 00:00:00
Ilość postów: 675

4335
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)

status krzysi
Data rejestracji: 2010-12-07 00:00:00
Ilość postów: 7

12781
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)

status Adalbert
Data rejestracji: 2009-03-19 00:00:00
Ilość postów: 675

4335
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)

status krzysi
Data rejestracji: 2010-12-07 00:00:00
Ilość postów: 7

12781
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)

status kamil-w
Data rejestracji: 2010-12-14 00:00:00
Ilość postów: 8

12800
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)

status Adalbert
Data rejestracji: 2009-03-19 00:00:00
Ilość postów: 675

4335
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)

status kamil-w
Data rejestracji: 2010-12-14 00:00:00
Ilość postów: 8

12800
wpis nr 383 825
[ CZCIONKA MONOSPACE ]

Będę czekać zatem, ciekaw jestem co z tego wyjdzie.
2010-12-21 (16:07)

status krzysi
Data rejestracji: 2010-12-07 00:00:00
Ilość postów: 7

12781
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)

status Adalbert
Data rejestracji: 2009-03-19 00:00:00
Ilość postów: 675

4335
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)

status Mariusz9
Data rejestracji: 2011-12-22 00:00:00
Ilość postów: 137

13300
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)

status Mariusz9
Data rejestracji: 2011-12-22 00:00:00
Ilość postów: 137

13300
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)

status romanx
Data rejestracji: 2008-11-02 00:00:00
Ilość postów: 10155

3859
wpis nr 528 235
[ CZCIONKA MONOSPACE ]

chyba źle... i wiem co źle nawet.
2012-05-27 (12:57)

status Mariusz9
Data rejestracji: 2011-12-22 00:00:00
Ilość postów: 137

13300
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)

status Mariusz9
Data rejestracji: 2011-12-22 00:00:00
Ilość postów: 137

13300
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 lottoStrona: 1 2 ... 9 10 11 12 13
Wyślij wiadomość do admina