import numpy as np def comp_theta_mle(d): """ Computes the Maximum Likelihood Estimate for a given 1D training dataset for a Rayleigh distribution. """ theta = len(d) / sum([x**2 for x in d]) return theta def likelihood_ray(x, theta): """ Computes the class-conditional probability for an univariate Rayleigh distribution """ return 2*theta*x*np.exp(-theta*(x**2)) if __name__ == "__main__": training_data = [10, 18, 19, 22, 24, 29, 33, 40, 68] theta = comp_theta_mle(training_data) # Plot Probability Density Function from matplotlib import pyplot as plt x_range = np.arange(0, 20, 0.1) y_range = [likelihood_ray(theta, x) for x in x_range] plt.figure(figsize=(10,8)) plt.plot(x_range, y_range, lw=2) plt.title('Probability density function for the Rayleigh distribution') plt.ylabel('p(x)') plt.xlabel('random variable x') plt.show()