[var dtc missing] performance increase with right iterations

This commit is contained in:
mzwiessele 2014-07-02 12:07:08 -07:00
parent d592f680f3
commit c8da45aa8f

View file

@ -198,7 +198,8 @@ class VarDTCMissingData(LatentFunctionInference):
def __init__(self, limit=1, inan=None): def __init__(self, limit=1, inan=None):
from ...util.caching import Cacher from ...util.caching import Cacher
self._Y = Cacher(self._subarray_computations, limit) self._Y = Cacher(self._subarray_computations, limit)
self._inan = inan if inan is not None: self._inan = ~inan
else: self._inan = None
pass pass
def set_limit(self, limit): def set_limit(self, limit):
@ -219,7 +220,7 @@ class VarDTCMissingData(LatentFunctionInference):
if self._inan is None: if self._inan is None:
inan = np.isnan(Y) inan = np.isnan(Y)
has_none = inan.any() has_none = inan.any()
self._inan = inan self._inan = ~inan
else: else:
inan = self._inan inan = self._inan
has_none = True has_none = True
@ -236,7 +237,7 @@ class VarDTCMissingData(LatentFunctionInference):
if ((i+1.)/size) >= next_ten[0]: if ((i+1.)/size) >= next_ten[0]:
logger.info('preparing traces {:> 3.1%}'.format((i+1.)/size)) logger.info('preparing traces {:> 3.1%}'.format((i+1.)/size))
next_ten[0] += .1 next_ten[0] += .1
y = y[~inan[:,i],i:i+1] y = y[inan[:,i],i:i+1]
return np.einsum('ij,ij->', y,y) return np.einsum('ij,ij->', y,y)
traces = [trace(Y) for _ in xrange(size)] traces = [trace(Y) for _ in xrange(size)]
return traces return traces
@ -260,7 +261,6 @@ class VarDTCMissingData(LatentFunctionInference):
beta_all = 1./np.fmax(likelihood.gaussian_variance(Y_metadata), 1e-6) beta_all = 1./np.fmax(likelihood.gaussian_variance(Y_metadata), 1e-6)
het_noise = beta_all.size != 1 het_noise = beta_all.size != 1
import itertools
num_inducing = Z.shape[0] num_inducing = Z.shape[0]
dL_dpsi0_all = np.zeros(Y.shape[0]) dL_dpsi0_all = np.zeros(Y.shape[0])
@ -287,10 +287,8 @@ class VarDTCMissingData(LatentFunctionInference):
#logger.info('computing dimension-wise likelihood and derivatives') #logger.info('computing dimension-wise likelihood and derivatives')
#size = len(Ys) #size = len(Ys)
for i, trYYT in enumerate(traces): for i, [y, v, trYYT] in enumerate(itertools.izip(Y.T[:,:,None], self._inan.T, traces)):
v = ~self._inan[:, i] y = y[v]
y = Y[v,i:i+1]#[:,ind]
#y = Y[v]
#logger.info('{:.3%} dimensions:{}'.format((i+1.)/size, ind)) #logger.info('{:.3%} dimensions:{}'.format((i+1.)/size, ind))
if het_noise: beta = beta_all[i] if het_noise: beta = beta_all[i]
else: beta = beta_all else: beta = beta_all