ax.plot(cur_pts[:, 0], cur_pts[:, 1], '-', alpha=alpha) def plot_gaussian_mixture(params, ax): for log_proportion, mean, cov_sqrt in zip(*unpack_gmm_params(params)): alpha = np.minimum(1.0, np.exp(log_proportion) * 10) plot_ellipse(ax, mean, cov_sqrt, alpha) if __name__ == '__main__': init_params = init_gmm_params(num_components=10, D=2, scale=0.1) data = make_pinwheel(radial_std=0.3, tangential_std=0.05, num_classes=3, num_per_class=100, rate=0.4) def objective(params): return -gmm_log_likelihood(params, data) flattened_obj, unflatten, flattened_init_params =\ flatten_func(objective, init_params) fig = plt.figure(figsize=(12, 8), facecolor='white') ax = fig.add_subplot(111, frameon=False) plt.show(block=False) def callback(flattened_params): params = unflatten(flattened_params)
def plot_ellipse(ax, mean, cov_sqrt, alpha, num_points=100): angles = np.linspace(0, 2*np.pi, num_points) circle_pts = np.vstack([np.cos(angles), np.sin(angles)]).T * 2.0 cur_pts = mean + np.dot(circle_pts, cov_sqrt) ax.plot(cur_pts[:, 0], cur_pts[:, 1], '-', alpha=alpha) def plot_gaussian_mixture(params, ax): for log_proportion, mean, cov_sqrt in zip(*unpack_gmm_params(params)): alpha = np.minimum(1.0, np.exp(log_proportion) * 10) plot_ellipse(ax, mean, cov_sqrt, alpha) if __name__ == '__main__': init_params = init_gmm_params(num_components=10, D=2, scale=0.1) data = make_pinwheel(radial_std=0.3, tangential_std=0.05, num_classes=3, num_per_class=100, rate=0.4) def objective(params): return -gmm_log_likelihood(params, data) flattened_obj, unflatten, flattened_init_params =\ flatten_func(objective, init_params) fig = plt.figure(figsize=(12,8), facecolor='white') ax = fig.add_subplot(111, frameon=False) plt.show(block=False) def callback(flattened_params): params = unflatten(flattened_params) print("Log likelihood {}".format(-objective(params))) ax.cla()