Path: blob/master/deprecated/scripts/KLfwdReverseMixGauss.py
1192 views
# Visualize difference between KL(p,q) and KL(q,p) where p is a mix of two1# 2d Gaussians, and q is a single 2d Gaussian2# Author: animesh-007345import superimport67import numpy as np8import matplotlib.pyplot as plt9from scipy.stats import multivariate_normal1011mu = np.array([[-1,-1],[1,1]])1213Sigma = np.zeros((2,2,2))14Sigma[:,:,0] = [[1/2,1/4],[1/4,1]]15Sigma[:,:,1] = [[1/2,-1/4],[-1/4,1]]16SigmaKL = np.array([[3,2],[2,3]])171819x1 = np.arange(-4,4.1,0.1).T20x2 = x12122n1 = np.size(x1)23n2 = np.size(x2)2425f1 = np.zeros((n1,n2))26f2 = np.zeros((n1,n2))27klf = np.zeros((n1,n2))28kll = np.zeros((n1,n2))29klr = np.zeros((n1,n2))3031for i in range(n1):32x_tile = np.tile(x1[i],(n2,1))33x_tile = x_tile.reshape(-1)34x_final = np.array([x_tile,x2])35x_final = x_final.T36f1[i,:] = multivariate_normal.pdf(x_final,mu[0,:],Sigma[:,:,0])37f2[i,:] = multivariate_normal.pdf(x_final,mu[1,:],Sigma[:,:,1])38klf[i,:] = multivariate_normal.pdf(x_final,[0,0],SigmaKL)39kll[i,:] = multivariate_normal.pdf(x_final,mu[0,:],Sigma[:,:,0]*0.6)40klr[i,:] = multivariate_normal.pdf(x_final,mu[1,:],Sigma[:,:,1]*0.6)414243f = f1 + f24445plots = [klf, kll, klr]4647fig, ax = plt.subplots(1,3,figsize=(8,8))48for axi, plot_ in zip(ax.flat,plots):49axi.axis('off')50axi.contour(x1, x2, f, colors='b', zorder=1)51axi.contour(x1,x2,plot_, colors='r',zorder=10)5253fig.savefig('../figures/klfwdzrevmixgauss.pdf', dpi=300)54plt.show()555657