comparison scripts/ABSapprox.py @ 20:45255b0a6dba

2011 11 08 Worked from school
author nikcleju
date Tue, 08 Nov 2011 14:43:29 +0000
parents ef0629f859a3
children 2dd78e37b23a
comparison
equal deleted inserted replaced
19:ef0629f859a3 20:45255b0a6dba
26 aggDupper = np.dot(M,D) 26 aggDupper = np.dot(M,D)
27 aggDlower = Vt[-(N-n):,:] 27 aggDlower = Vt[-(N-n):,:]
28 aggD = np.concatenate((aggDupper, lbd * aggDlower)) 28 aggD = np.concatenate((aggDupper, lbd * aggDlower))
29 aggy = np.concatenate((y, np.zeros(N-n))) 29 aggy = np.concatenate((y, np.zeros(N-n)))
30 30
31 sigmamin = 0.1 31 sigmamin = 0.01
32 return aggD,aggy,epsilon,sigmamin 32 sigma_decrease_factor = 0.8
33 mu_0 = 2
34 L = 10
35 return aggD,aggy,epsilon,sigmamin,sigma_decrease_factor,mu_0,L
36
37 def post_multiply_with_D(D,gamma):
38 return np.dot(D,gamma)
39 def post_do_nothing(D,gamma):
40 return gamma
33 41
34 # Define tuples (algorithm setup function, algorithm function, name) 42 # Define tuples (algorithm setup function, algorithm function, name)
35 gap = (gap_paramsetup, pyCSalgos.GAP.GAP.GAP, 'GAP') 43 gap = (gap_paramsetup, pyCSalgos.GAP.GAP.GAP, post_do_nothing, 'GAP')
36 sl0 = (sl0_paramsetup, pyCSalgos.SL0.SL0_approx.SL0_approx, 'SL0_approx') 44 sl0 = (sl0_paramsetup, pyCSalgos.SL0.SL0_approx.SL0_approx, post_multiply_with_D, 'SL0_approx')
45 #sl0 = (sl0_paramsetup, lambda x: np.dot(x[0],x[1]()), 'SL0_approx')
37 46
38 # Main function 47 # Main function
39 def mainrun(): 48 def mainrun():
40 49
41 # Define which algorithms to run 50 # Define which algorithms to run
44 53
45 # Set up experiment parameters 54 # Set up experiment parameters
46 sigma = 2.0; 55 sigma = 2.0;
47 delta = 0.8; 56 delta = 0.8;
48 rho = 0.15; 57 rho = 0.15;
49 numvects = 2; # Number of vectors to generate 58 numvects = 10; # Number of vectors to generate
50 SNRdb = 20; # This is norm(signal)/norm(noise), so power, not energy 59 SNRdb = 20.; # This is norm(signal)/norm(noise), so power, not energy
51 60
52 # Process parameters 61 # Process parameters
53 noiselevel = 1 / (10^(SNRdb/10)); 62 noiselevel = 1.0 / (10.0**(SNRdb/10.0));
54 d = 50; 63 d = 50;
55 p = round(sigma*d); 64 p = round(sigma*d);
56 m = round(delta*d); 65 m = round(delta*d);
57 l = round(d - rho*m); 66 l = round(d - rho*m);
58 67
73 82
74 xrec = dict() 83 xrec = dict()
75 err = dict() 84 err = dict()
76 relerr = dict() 85 relerr = dict()
77 for i,algo in zip(np.arange(numalgos),algos): 86 for i,algo in zip(np.arange(numalgos),algos):
78 xrec[algo[2]] = np.zeros((lambdas.size, d, y.shape[1])) 87 xrec[algo[3]] = np.zeros((lambdas.size, d, y.shape[1]))
79 err[algo[2]] = np.zeros((lambdas.size, y.shape[1])) 88 err[algo[3]] = np.zeros((lambdas.size, y.shape[1]))
80 relerr[algo[2]] = np.zeros((lambdas.size, y.shape[1])) 89 relerr[algo[3]] = np.zeros((lambdas.size, y.shape[1]))
81 90
82 for ilbd,lbd in zip(np.arange(lambdas.size),lambdas): 91 for ilbd,lbd in zip(np.arange(lambdas.size),lambdas):
83 for iy in np.arange(y.shape[1]): 92 for iy in np.arange(y.shape[1]):
84 for algosetupfunc,algofunc,strname in algos: 93 for algosetupfunc,algofunc,algopostfunc,strname in algos:
85 epsilon = 1.1 * np.linalg.norm(realnoise[:,iy]) 94 epsilon = 1.1 * np.linalg.norm(realnoise[:,iy])
86 95
87 inparams = algosetupfunc(y[:,iy],M,Omega,epsilon,lbd) 96 inparams = algosetupfunc(y[:,iy],M,Omega,epsilon,lbd)
88 xrec[strname][ilbd,:,iy] = algofunc(*inparams)[0] 97 xrec[strname][ilbd,:,iy] = algopostfunc(algofunc(*inparams)[0])
89 98
90 err[strname][ilbd,iy] = np.linalg.norm(x0[:,iy] - xrec[strname][ilbd,:,iy]) 99 err[strname][ilbd,iy] = np.linalg.norm(x0[:,iy] - xrec[strname][ilbd,:,iy])
91 relerr[strname][ilbd,iy] = err[strname][ilbd,iy] / np.linalg.norm(x0[:,iy]) 100 relerr[strname][ilbd,iy] = err[strname][ilbd,iy] / np.linalg.norm(x0[:,iy])
92 101
93 print 'Lambda = ',lbd,' :' 102 print 'Lambda = ',lbd,' :'