Exemplo n.º 1
0
# # To do:
# 
# * Put priors/weight decay on coefficients
# * Fix first dimension of tensors:
#     * predicting with different N
#     * minibatching
# * Extend the response distribution
#     * overdispersion
#     * zero-inflation
# * Repeated measures for sites & observers
# * Penalties to discourage structure in `qz`?
# * Imputation/missing values?
#     * Maybe only after model has already been trained, like Mistnet's figure 5

# In[ ]:

q = qz.variance().eval()
plt.scatter(x_train[:,0], q[:,0], alpha=0.25)
plt.scatter(x_train[:,0], q[:,1], alpha=0.25)


# In[ ]:




# In[ ]:



    X_q_tf = tf.constant(X_q, dtype=tfdt)
    X_q_features = rbf_kernel(
        X_q_tf, qhinge_grid.mean(),
        qgamma.bijector.forward(qgamma.distribution.mean()), tfdt)

    # Running inference
    for t in range(inference.n_iter):
        if t % 10 == 0:
            print("\nsaving {}".format(t))
            qgamma_eval = qgamma.bijector.forward(
                qgamma.distribution.mean()).eval()
            qgamma_var_eval = qgamma.distribution.variance().eval()
            qhinge_grid_eval = qhinge_grid.mean().eval()
            post_mu = tf.matmul(X_q_features, qw.mean())
            post_var = tf.reduce_sum(tf.square(X_q_features) *
                                     tf.transpose(qw.variance()),
                                     axis=1,
                                     keepdims=True)
            kappa_var = 1 / tf.sqrt(1 + np.pi * post_var / 8)
            probs = tf.sigmoid(kappa_var * post_mu)
            probs_eval = probs.eval()

            FIG = plt.figure(figsize=(14, 9))

            ax = plt.subplot(131)
            scattr = ax.scatter(X[:, 0],
                                X[:, 1],
                                c=Y.flatten(),
                                s=2,
                                cmap='jet')
            ax.set_xlim(*display_xlim)
# Model: deep/shallow GP (generative model)
X = Normal(loc=tf.zeros([N, K]), scale=tf.ones([N, K]))
Kernal = rbf(X) + tf.eye(N) * 1e-6
cholesky = tf.tile(tf.reshape(tf.cholesky(Kernal), [1, N, N]), [H1, 1, 1])

h1 = MultivariateNormalTriL(loc=tf.zeros([H1, N]), scale_tril=cholesky)
Kernal1 = rbf(tf.transpose(h1)) + tf.eye(N) * 1e-6
cholesky1 = tf.tile(tf.reshape(tf.cholesky(Kernal1), [1, N, N]), [H2, 1, 1])

h2 = MultivariateNormalTriL(loc=tf.zeros([H2, N]), scale_tril=cholesky1)
Kernal2 = rbf(tf.transpose(h2)) + tf.eye(N) * 1e-6
cholesky2 = tf.tile(tf.reshape(tf.cholesky(Kernal2), [1, N, N]), [D, 1, 1])

Y = MultivariateNormalTriL(loc=tf.zeros([D, N]), scale_tril=cholesky2)

# Inference (recongnition model)
qX = Normal(loc=tf.Variable(tf.random_normal([N, K])),
            scale=tf.nn.softplus(tf.Variable(tf.random_normal([N, K]))))

inference = ed.KLqp({X: qX}, data={Y: data.transpose()})
inference.run(n_iter=1000)

# Evaluate
sess = ed.get_session()
qX_mean, qX_var = sess.run([qX.mean(), qX.variance()])
plt.scatter(qX_mean[:, 0], qX_mean[:, 1])

Y_post = ed.copy(Y, {X: qX})
Y_post = Y_post.eval()
plt.scatter(Y_post[:, 0], Y_post[:, 1])
plt.scatter(data[:, 0], data[:, 1])  # observation