def test_eval_parametric(self): data = np.array([1, 1, 1, 1, 1, 1, 1], dtype=np.float32).reshape( (1, 7)) spn = (Gaussian(mean=1.0, stdev=1.0, scope=[0]) * Exponential(l=1.0, scope=[1]) * Gamma(alpha=1.0, beta=1.0, scope=[2]) * LogNormal(mean=1.0, stdev=1.0, scope=[3]) * Poisson(mean=1.0, scope=[4]) * Bernoulli(p=0.6, scope=[5]) * Categorical(p=[0.1, 0.2, 0.7], scope=[6])) ll = log_likelihood(spn, data) tf_ll = eval_tf(spn, data) self.assertTrue(np.all(np.isclose(ll, tf_ll))) spn_copy = Copy(spn) tf_graph, data_placeholder, variable_dict = spn_to_tf_graph( spn_copy, data, 1) with tf.Session() as sess: sess.run(tf.global_variables_initializer()) tf_graph_to_spn(variable_dict) str_val = spn_to_str_equation(spn) str_val2 = spn_to_str_equation(spn_copy) self.assertEqual(str_val, str_val2)
raise Exception("Unknown parametric " + str(type(node))) if __name__ == '__main__': node = Gaussian(np.inf, np.inf) data = np.array([1, 2, 3, 4, 5]).reshape(-1, 1) update_parametric_parameters_mle(node, data) assert np.isclose(node.mean, np.mean(data)) assert np.isclose(node.stdev, np.std(data)) node = Gamma(np.inf, np.inf) data = np.array([1, 2, 3, 4, 5]).reshape(-1, 1) update_parametric_parameters_mle(node, data) assert np.isclose(node.alpha / node.beta, np.mean(data)), node.alpha node = LogNormal(np.inf, np.inf) data = np.array([1, 2, 3, 4, 5]).reshape(-1, 1) update_parametric_parameters_mle(node, data) assert np.isclose(node.mean, np.log(data).mean(), atol=0.00001) assert np.isclose(node.stdev, np.log(data).std(), atol=0.00001) node = Poisson(np.inf) data = np.array([1, 2, 3, 4, 5]).reshape(-1, 1) update_parametric_parameters_mle(node, data) assert np.isclose(node.mean, np.mean(data)) node = Categorical(np.array([1, 1, 1, 1, 1, 1]) / 6) data = np.array([0, 0, 1, 3, 5]).reshape(-1, 1) update_parametric_parameters_mle(node, data) assert np.isclose(node.p[0], 2 / 5) assert np.isclose(node.p[1], 1 / 5)
# # gamma, alpha=20, beta=1 gamma = Gamma(alpha=20, beta=1.1, scope=[0]) pdf_x, pdf_y = approximate_density(gamma, x_range) fig, ax = plt.subplots(1, 1) ax.plot(pdf_x, pdf_y, label="gamma") print('Gamma Mode:', gamma.mode) plt.axvline(x=gamma.mode, color='r') if show_plots: plt.show() # # lognormal lognormal = LogNormal(mean=-5, stdev=1.1, scope=[0]) pdf_x, pdf_y = approximate_density(lognormal, x_range) fig, ax = plt.subplots(1, 1) ax.plot(pdf_x, pdf_y, label="lognormal") print('LogNormal Mode:', lognormal.mode) plt.axvline(x=lognormal.mode, color='r') if show_plots: plt.show() # # poisson poisson = Poisson(mean=5, scope=[0]) pdf_x, pdf_y = approximate_density(poisson, x_range) fig, ax = plt.subplots(1, 1)