from ipywidgets import interact, FloatSlider
import numpy as np
from scipy.stats import norm
import matplotlib.pyplot as plt
For $M$ Gaussians, its mixture would be given by
$$ p(w_i) = \sum_{j=1}^M \pi_j \mathcal{N}(w_i | \mu_j, \sigma_j^2) $$@interact(m1=FloatSlider(min=-2, max=2, value=0),
m2=FloatSlider(min=-2, max=2, value=0),
s1=FloatSlider(min=0.1, max=1, value=1),
s2=FloatSlider(min=0.1, max=1, value=1),
p1=FloatSlider(min=0, max=1, value=0.5))
def mixture(m1, m2, s1, s2, p1):
x = np.linspace(-4, 4, 100)
p2 = 1 - p1
N1 = norm.pdf(x, loc=m1, scale=s1)
N2 = norm.pdf(x, loc=m2, scale=s2)
D = p1 * N1 + p2 * N2
plt.plot(x, N1, alpha=0.5)
plt.plot(x, N2, alpha=0.5)
plt.plot(x, D, label="Mixture")
plt.legend()
interactive(children=(FloatSlider(value=0.0, description='m1', max=2.0, min=-2.0), FloatSlider(value=0.0, desc…