python3 src/main.py
docker build -t pai ./
docker run --rm pai
Prior:
mu_prior = np.array([mu_1, mu_2])
Sigma_prior = np.array([[var_1, cov_1_2], [cov_2_1, var_2]])
w = np.random.multivariate_normal(mean = mu_prior, cov = Sigma_prior)
Likelihood:
Posterior:
sigm_alea_sq_inv = 1 / (sigma_aleatoric ** 2)
Sigma_posterior = np.linalg.pinv(sigm_alea_sq_inv * X.T @ X + sigm_alea_sq_inv * np.identity(2))
mu_posterior = sigm_alea_sq_inv * Sigma_posterior @ X.T @ Y
Posterior predictive distribution:
MAP = X_out_of_sample @ mu_posterior
three_sigma = 3 * np.diagonal(X_out_of_sample @ Sigma_posterior @ X_out_of_sample.T)
epistemic_y1, epistemic_y2 = MAP - three_sigma, MAP + three_sigma
aleatoric_lower_y1, aleatoric_lower_y2 = epistemic_y1, epistemic_y1 - 3 * sigma_aleatoric
aleatoric_upper_y1, aleatoric_upper_y2 = epistemic_y2, epistemic_y2 + 3 * sigma_aleatoric
Prior:
Posterior:
Posterior predictive distribution: