diff options
Diffstat (limited to 'sourcecodes/bnt-master/SLP/examples/test_cache.m')
| -rw-r--r-- | sourcecodes/bnt-master/SLP/examples/test_cache.m | 177 |
1 files changed, 177 insertions, 0 deletions
diff --git a/sourcecodes/bnt-master/SLP/examples/test_cache.m b/sourcecodes/bnt-master/SLP/examples/test_cache.m new file mode 100644 index 00000000..ff8e84a1 --- /dev/null +++ b/sourcecodes/bnt-master/SLP/examples/test_cache.m @@ -0,0 +1,177 @@ +% INITIALISATIONS +%%%%%%%%%%%%%%%%% + +clear +%load asia5000 + +N=8;L=100; +ns=2*ones(1,N); +%data=asiab(:,1:5000); +m=5000; + +bnet=mk_asia2_bnet; +data = cell(N,m); +for l = 1:m, data(:,l) = sample_bnet(bnet); end +data=cell2mat(data);asiab=data; +fprintf('Complete data have been created.'); + +names={ 'A' , 'S' , 'T' , 'L' , 'B' , 'O' , 'X' , 'D' }; + +scoring_fn='bic'; +%scoring_fn='bayesian'; + +% greedy search sur asia sans le cache +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +res=zeros(2,10);i=0; + +for L=100:100:500 +i=i+1;L + +tps=cputime; +D1=learn_struct_gs(data, ns, zeros(N,N),'scoring_fn',scoring_fn); +tps=cputime-tps +%subplot(1,4,2);draw_graph(D1,names,ones(1,N),xx,yy); + +% score BIC (ce sont des chiffres moyen sur ma machine pour environ 5 test par catégories, et idem pour les autres res) +% 100 exemples : 24s +% 500 exemples : 33s +% 1500 exemples : 49s +% 5000 exemples : 112s +% score Bayesien +% 100 exemples : 30 +% 1500 exemples : 39 +% 5000 exemples : 102 + +res(1,i)=tps; + +% greedy search sur asia avec le cache +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%cache=sparse(L,N+3); +cache=score_init_cache(N,L); + +% QD le cache est vide +tps2=cputime; +[D2 best2]=learn_struct_gs(data, ns, zeros(N,N),'scoring_fn',scoring_fn,'cache',cache); +tps2=cputime-tps2 + +res(2,i)=tps2; +end + +%subplot(1,4,3);draw_graph(D2,names,ones(1,N),xx,yy); +% L=100 +% score BIC +% 100 exemples : 28s +% taille du cache : 4860 octets pour 94 entrées au lieu de 8272 pour une matrice de taille 94*11. +% 1500 exemples : 45s +% 5000 exemples : 77s +% score Bayesien +% 100 exemples : 28 +% 1500 exemples : 35 +% 5000 exemples : 78 + +% QD le cache existe +%tps3=cputime; +%[D3 best3]=learn_struct_gs(data, ns, zeros(N,N),'scoring_fn',scoring_fn,'cache', cache2); +%tps3=cputime-tps3 +%subplot(1,4,4);draw_graph(D3,names,ones(1,N),xx,yy); +% L=100 +% score BIC +% 100 exemples : 37s qd le cache existe. +% 1500 exemples : 69s 62 +% 5000 exemples : 129s +% score Bayesien +% 100 exemples : 27 } +% 1500 exemples : 66 } -> phenomène du a une taille de cache trop petite +% 5000 exemples : 127 } ca se stabilise à partir de L=200 voir conclusion + + + +L=400; +cache=zeros(L,N+3); +tps0=zeros(2,20);i=0; +for taille=250:250:2000 +i=i+1;taille +cache=score_init_cache(N,L); +data=asiab(:,1:taille); +tps=cputime; +D=learn_struct_gs(data, ns, zeros(N,N),'scoring_fn',scoring_fn); +tps0(1,i)=cputime-tps; +tps=cputime; +[D best]=learn_struct_gs(data, ns, zeros(N,N),'scoring_fn',scoring_fn,'cache',cache); +tps0(2,i)=cputime-tps +end + +% taille BD : 100 200 300 400 500 600 700 800 900 1000 1100 1200 1300 1400 1500 1600 1700 1800 1900 2000 +% ss cache : 24.1 24.7 29.8 51.1 31.1 36.8 38.0 30.3 48.7 44.6 47.9 46.2 46.9 51.6 50.3 50.3 56.5 50.9 51.6 48.6 +% avec cache: 22.9 23.0 27.1 46.6 27.6 32.5 32.5 26.0 41.3 36.6 39.3 37.5 37.0 40.3 37.4 39.0 41.9 37.5 40.0 34.4 + + + +%%%%%%%%%%%%%% +% CONCLUSION % +%%%%%%%%%%%%%% + +% Si la base de données est petite, il vaut mieux ne pas utiliser de cache. +% Celui-ci deviens utile à partir de la taille 500 environ... +% Au final on arrive presque à gagner 25% du tps avec 1500 exemple et 40% avec 5000 exemples sur le temps d'execution sur cet exemple. +% Utiliser un cache vide, ou un cache possédant deja des valeurs ne change pas grand chose, à part si celui-ci est de taille trop petite ^^(voir res pour 5000 exemples et score bic et res2 pour 1500 ex et score bayésien et res3 pour 500 ex et bic et res4 pour 1500 et bic)). +% Sinon qd le cache est trop gd cela n'est pas trop grave. +% En fait, utiliser une matrice classique prend moins de place mémoire qd le cache est plein. +% +% res= (L=100 200 300 400 500 600 700 800 900 1000) +% ssc 112 +% cvide 86.5 63.6 64.4 65.1 63.9 64.1 64.4 64.5 64.2 64.8 +% cplein127.7 63.4 63.8 63.7 63.4 63.9 63.5 63.9 63.6 64.2 +% +% res2= (L=20 40 60 80 100 120 140 160 180 200 300 400 500 600) +% ssc 39 +% cvide 46.5 49.2 49.7 52.3 41.9 36.3 46.5 47.1 47.3 46.2 46.4 34.9 35.4 35.9 +% cplein 44.9 46.2 47.7 51.1 69.0 36.0 37.1 37.6 48.2 47.7 48.2 47.7 36.7 36.2 +% +% res3= (L=50 100 150 200 250 300 350 400 450 500 550 600) +% ssc 33 +% cvide 41.9 28.8 28.5 28.6 28.4 28.7 28.4 28.9 28.7 28.8 28.5 28.6 +% cplein 39.1 46.3 28.9 29.3 29.0 29.5 29.1 29.6 29.3 29.0 29.4 29.3 +% +% res4= (L=50 100 150 200 250 300 350 400) +% ssc 49 +% cvide 55.3 39.0 37.2 39.2 37.9 38.3 37.8 38.4 +% +% +% ON voit donc qu'une fois la taille du cache bien choisie, celui-ci ne fait pas perdre de perfs sur les petites BD, +% IL ne reste donc plus qu'a trouver une formule qui donne une taille de cache optimum en fonction du nombre de noeud, +% et esperer que celle-ci ne soit pas trop exponnentielle... + + + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ANNEXE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% ChronoMetrage pour 1500 exemples. +% (pas à jour, c'était comme ca au debut maintenant le prétraitement est passé à ~~0.25s) +%%%%%%%%%%%%%%% + +% n'existe pas ds le cache | existe | ss cache +% -----------------------------------------|-------------|-------------- +% Prétraitement ==> 0.0044~64 secondes | 0.0063~84 s | <== trop long +% Lecture ==> 0.0004~09 secondes | 0.0004~09 s | +% if ~exist | | +% calcul ==> 0.0076~87 secondes | | 0.0076~87 s <== par rapport a ca +% ecriture ==> 0.0005~05 secondes | | +% _________________________________________|_____________|_______________ +% TOTAL === 1,3~1,6 ms | 0,7~,9 ms | 0,9 ms +% | +% |__> à évoluer vers ???? + +% enlever les commentaires sur les tic,toc en dur ds les fonctions + +% tic +% [scorr cac]=score_family(2,[3 4 5],'tabular', 'bic', 2*ones(1,N),1:N, data, {}, cache); +% toc +% tic +% [scorr cac]=score_family(2,[3 4 5],'tabular', 'bic', 2*ones(1,N),1:N, data, {}, cac); +% toc +% tic +% scorr=score_family(2,[3 4 5],'tabular', 'bic', 2*ones(1,N),1:N, data, {}); +% toc |
