def compare_to_matlab(measurement='Near'): prior = GaussianMixture( weights=[1, 1, 1, 1, 1], means=[ [-2, -4], # GM1 mean [-1, -2], # GM2 mean [0, 0], # GM3 mean [1, -2], # GM4 mean [2, -4], # GM5 mean ], covariances=[ [ [0.1, 0], # GM1 mean [0, 0.1] ], [ [0.2, 0], # GM2 mean [0, 0.2] ], [ [0.3, 0], # GM3 mean [0, 0.3] ], [ [0.2, 0], # GM4 mean [0, 0.2] ], [ [0.1, 0], # GM5 mean [0, 0.1] ], ]) # prior = GaussianMixture(weights=[1], # means=[[-2, -4], # GM1 mean # ], # covariances=[[[0.1, 0], # GM1 mean # [0, 0.1] # ], # ]) # Define sensor likelihood brm = range_model() file_ = open('/Users/nick/Downloads/VBIS GM Fusion/nick_output.csv', 'w') for i in range(30): # Do a VBIS update logging.info('Starting VB update...') vb = VariationalBayes() mu_hat, var_hat, beta_hat = vb.update(measurement, brm, prior) # Flatten values flat = np.hstack((beta_hat, mu_hat.flatten(), var_hat.flatten())) # Save Flattened values np.savetxt(file_, np.atleast_2d(flat), delimiter=',') file_.close()
def gmm_sm_test(measurement='Outside'): # Define prior # prior = GaussianMixture(weights=[1, 4, 5], # means=[[0.5, 1.3], # GM1 mean # [-0.7, -0.6], # GM2 mean # [0.2, -3], # GM3 mean # ], # covariances=[[[0.4, 0.3], # GM1 mean # [0.3, 0.4] # ], # [[0.3, 0.1], # GM2 mean # [0.1, 0.3] # ], # [[0.5, 0.4], # GM3 mean # [0.4, 0.5]], # ]) prior = GaussianMixture( weights=[1, 1, 1, 1, 1], means=[ [-2, -4], # GM1 mean [-1, -2], # GM2 mean [0, 0], # GM3 mean [1, -2], # GM4 mean [2, -4], # GM5 mean ], covariances=[ [ [0.1, 0], # GM1 mean [0, 0.1] ], [ [0.2, 0], # GM2 mean [0, 0.2] ], [ [0.3, 0], # GM3 mean [0, 0.3] ], [ [0.2, 0], # GM4 mean [0, 0.2] ], [ [0.1, 0], # GM5 mean [0, 0.1] ], ]) # prior = GaussianMixture(weights=[1], # means=[[-2, -4], # GM1 mean # ], # covariances=[[[0.1, 0], # GM1 mean # [0, 0.1] # ], # ]) # Define sensor likelihood brm = range_model() # Do a VBIS update logging.info('Starting VB update...') vb = VariationalBayes() mu_hat, var_hat, beta_hat = vb.update(measurement, brm, prior, use_LWIS=True) vbis_posterior = GaussianMixture(weights=beta_hat, means=mu_hat, covariances=var_hat) # Define gridded space for graphing min_x, max_x = -5, 5 min_y, max_y = -5, 5 res = 100 x_space, y_space = np.mgrid[min_x:max_x:1 / res, min_y:max_y:1 / res] pos = np.empty(x_space.shape + (2, )) pos[:, :, 0] = x_space pos[:, :, 1] = y_space levels_res = 50 max_prior = np.max(prior.pdf(pos)) prior_levels = np.linspace(0, max_prior, levels_res) brm.probability() max_lh = np.max(brm.probs) lh_levels = np.linspace(0, max_lh, levels_res) max_post = np.max(vbis_posterior.pdf(pos)) post_levels = np.linspace(0, max_post, levels_res) # Plot results fig = plt.figure() likelihood_label = 'Likelihood of \'{}\''.format(measurement) prior_ax = plt.subplot2grid((2, 32), (0, 0), colspan=14) prior_cax = plt.subplot2grid((2, 32), (0, 14), colspan=1) prior_c = prior_ax.contourf(x_space, y_space, prior.pdf(pos), levels=prior_levels) cbar = plt.colorbar(prior_c, cax=prior_cax) prior_ax.set_xlabel('x1') prior_ax.set_ylabel('x2') prior_ax.set_title('Prior Distribution') lh_ax = plt.subplot2grid((2, 32), (0, 17), colspan=14) lh_cax = plt.subplot2grid((2, 32), (0, 31), colspan=1) brm.classes[measurement].plot(ax=lh_ax, label=likelihood_label, ls='--', levels=lh_levels, show_plot=False, plot_3D=False) # plt.colorbar(sm.probs, cax=lh_cax) lh_ax.set_title(likelihood_label) posterior_ax = plt.subplot2grid((2, 32), (1, 0), colspan=31) posterior_cax = plt.subplot2grid((2, 32), (1, 31), colspan=1) posterior_c = posterior_ax.contourf(x_space, y_space, vbis_posterior.pdf(pos), levels=post_levels) plt.colorbar(posterior_c, cax=posterior_cax) posterior_ax.set_xlabel('x1') posterior_ax.set_ylabel('x2') posterior_ax.set_title('VBIS Posterior Distribution') logging.info( 'Prior Weights: \n {} \n Means: \n {} \n Variances: \n {} \n'.format( prior.weights, prior.means, prior.covariances)) logging.info( 'Posterior Weights: \n {} \n Means: \n {} \n Variances: \n {} \n'. format(vbis_posterior.weights, vbis_posterior.means, vbis_posterior.covariances)) plt.show()