Aai 02
Aai 02
ipynb - Colaboratory
import numpy as np
from numpy import random
from matplotlib.patches import Ellipse
import matplotlib.transforms as transforms
from scipy.stats import multivariate_normal
import matplotlib.pyplot as plt
class GMM():
def __init__(self, k=3, dim=2, init_mu=None, init_sigma=None, init_pi=None, colors=None):
self.k = k
self.dim = dim
if(init_mu is None):
init_mu = random.rand(k, dim) * 15 - 10
self.mu = init_mu
if(init_sigma is None):
init_sigma = np.zeros((k, dim, dim))
for i in range(k):
init_sigma[i] = np.eye(dim)
self.sigma = init_sigma
if(init_pi is None):
init_pi = np.ones(self.k) / self.k
self.pi = init_pi
if(colors is None):
colors = random.rand(k, 3)
self.colors = colors
def e_step(self):
for i in range(self.k):
self.z[:, i] = self.pi[i] * multivariate_normal.pdf(self.data, mean=self.mu[i], cov=self
self.z /= self.z.sum(axis=1, keepdims=True)
def m_step(self):
sum_z = self.z.sum(axis=0)
self.pi = sum_z / self.num_points
self.mu = np.matmul(self.z.T, self.data)
self.mu /= sum_z[:, None]
for i in range(self.k):
j = np.expand_dims(self.data, axis=1) - self.mu[i]
s = np.matmul(j.transpose([0, 2, 1]), j)
self.sigma[i] = np.matmul(s.transpose(1, 2, 0), self.z[:, i] )
self.sigma[i] /= sum_z[i]
https://colab.research.google.com/drive/1b1BfowB_YMM4gZPiehOELIlZwV8bJjYq#scrollTo=Xkt20kdReEKB&printMode=true 2/5
2/11/24, 3:30 PM GMMnew.ipynb - Colaboratory
plt.tight_layout()
plt.show()
https://colab.research.google.com/drive/1b1BfowB_YMM4gZPiehOELIlZwV8bJjYq#scrollTo=Xkt20kdReEKB&printMode=true 3/5
2/11/24, 3:30 PM GMMnew.ipynb - Colaboratory
https://colab.research.google.com/drive/1b1BfowB_YMM4gZPiehOELIlZwV8bJjYq#scrollTo=Xkt20kdReEKB&printMode=true 4/5
2/11/24, 3:30 PM GMMnew.ipynb - Colaboratory
# Plot log-likelihood
fig = plt.figure(figsize=(5, 4))
plt.plot(log_likelihood[1:], marker='.')
plt.show()
https://colab.research.google.com/drive/1b1BfowB_YMM4gZPiehOELIlZwV8bJjYq#scrollTo=Xkt20kdReEKB&printMode=true 5/5