In [1]:
%load_ext autoreload
%autoreload 2
from autograd import grad
import autograd.numpy as np
import autograd.numpy.random as npr
import autograd.scipy.special as sp
from gamma_def import *
from gamma_def_rejection import *
from gamma_def_generalized import *
from gamma_def_score import *
import matplotlib.pyplot as plt
%matplotlib inline
In [3]:
# Initialize
x = np.loadtxt('data/nips_train.csv')
N = x.shape[0]
D = x.shape[1]
alphaz = 0.1
K = np.array([100,40,15])
params = np.load('results/Nips_Eta0.05_B2_corrTrue_K1_100_K2_40_K3_15_params_R.npy')
In [ ]:
%timeit grep_gradient(params[:,0],params[:,1],x,K,alphaz)
%timeit reparam_gradient(params[:,0],params[:,1],x,K,alphaz,corr=True,B=4)
In [9]:
# Estimate variance at initial step
np.random.seed(0)
sigma = 0.1
params[:,0] = 0.5+sigma*np.random.normal(size=N*np.sum(K)+D*K[0]+K[1]*K[0]+K[2]*K[1])
params[:,1] = sigma*np.random.normal(size=N*np.sum(K)+D*K[0]+K[1]*K[0]+K[2]*K[1])
params = np.log(1.+np.exp(params))
params[params[:,0]<1.,0] = 1.
S = 10
grep = np.zeros((S,params.shape[0],params.shape[1]))
rej1 = np.zeros((S,params.shape[0],params.shape[1]))
rej2 = np.zeros((S,params.shape[0],params.shape[1]))
for s in range(S):
grep[s,:,:] = grep_gradient(params[:,0],params[:,1],x,K,alphaz)
rej1[s,:,:] = reparam_gradient(params[:,0],params[:,1],x,K,alphaz,corr=True,B=0)
rej2[s,:,:] = reparam_gradient(params[:,0],params[:,1],x,K,alphaz,corr=True,B=4)
In [ ]:
print np.min(np.var(rej1,axis=0)),np.median(np.var(rej1,axis=0)),np.max(np.var(rej1,axis=0))
print np.min(np.var(rej2,axis=0)),np.median(np.var(rej2,axis=0)),np.max(np.var(rej2,axis=0))
print np.min(np.var(grep,axis=0)),np.median(np.var(grep,axis=0)),np.max(np.var(grep,axis=0))
In [ ]:
# Estimate variance after 2600 iterations
np.random.seed(0)
params = np.load('results/Nips_Eta0.05_B2_corrTrue_K1_100_K2_40_K3_15_params_R.npy')
S = 10
grep = np.zeros((S,params.shape[0],params.shape[1]))
rej1 = np.zeros((S,params[ind,:].shape[0],params[ind,:].shape[1]))
rej2 = np.zeros((S,params.shape[0],params.shape[1]))
for s in range(S):
grep[s,:,:] = grep_gradient(params[:,0],params[:,1],x,K,alphaz)
rej1[s,:,:] = reparam_gradient(params[:,0],params[:,1],x,K,alphaz,corr=True,B=1.)
rej2[s,:,:] = reparam_gradient(params[:,0],params[:,1],x,K,alphaz,corr=True,B=4)
In [ ]:
print np.min(np.var(rej1,axis=0)),np.median(np.var(rej1,axis=0)),np.max(np.var(rej1,axis=0))
print np.min(np.var(rej2,axis=0)),np.median(np.var(rej2,axis=0)),np.max(np.var(rej2,axis=0))
print np.min(np.var(grep,axis=0)),np.median(np.var(grep,axis=0)),np.max(np.var(grep,axis=0))
In [ ]: