13
13
14
14
__all__ = ['GP' , 'sample_gp' ]
15
15
16
+
16
17
class GP (Continuous ):
17
18
"""Gausian process
18
19
@@ -76,7 +77,8 @@ def logp(self, Y, X=None):
76
77
return MvNormal .dist (mu , Sigma ).logp (Y )
77
78
78
79
79
- def sample_gp (trace , gp , X_values , samples = None , obs_noise = True , model = None , random_seed = None , progressbar = True , chol_const = True ):
80
+ def sample_gp (trace , gp , X_values , samples = None , obs_noise = True , model = None , random_seed = None , progressbar = True ,
81
+ chol_const = True ):
80
82
"""Generate samples from a posterior Gaussian process.
81
83
82
84
Parameters
@@ -106,18 +108,17 @@ def sample_gp(trace, gp, X_values, samples=None, obs_noise=True, model=None, ran
106
108
-------
107
109
Array of samples from posterior GP evaluated at Z.
108
110
"""
109
- model = modelcontext (model )
110
-
111
111
if samples is None :
112
112
samples = len (trace )
113
113
114
+ model = modelcontext (model )
115
+
114
116
if random_seed :
115
117
np .random .seed (random_seed )
116
118
119
+ indices = np .random .randint (0 , len (trace ), samples )
117
120
if progressbar :
118
- indices = tqdm (np .random .randint (0 , len (trace ), samples ), total = samples )
119
- else :
120
- indices = np .random .randint (0 , len (trace ), samples )
121
+ indices = tqdm (indices , total = samples )
121
122
122
123
K = gp .distribution .K
123
124
@@ -134,11 +135,13 @@ def sample_gp(trace, gp, X_values, samples=None, obs_noise=True, model=None, ran
134
135
else :
135
136
S_inv = matrix_inverse (K (X ))
136
137
138
+ S_xz_S_inv = tt .dot (S_xz .T , S_inv )
137
139
# Posterior mean
138
- m_post = tt .dot (tt . dot ( S_xz . T , S_inv ) , Y )
140
+ m_post = tt .dot (S_xz_S_inv , Y )
139
141
# Posterior covariance
140
- S_post = S_zz - tt .dot (tt . dot ( S_xz . T , S_inv ) , S_xz )
142
+ S_post = S_zz - tt .dot (S_xz_S_inv , S_xz )
141
143
144
+ correction = 0
142
145
if chol_const :
143
146
n = S_post .shape [0 ]
144
147
correction = 1e-6 * tt .nlinalg .trace (S_post ) * tt .eye (n )
0 commit comments