#338 · Machine Learning · Medium
⊣ Solve on deep-ml.comImplement Maximum A Posteriori (MAP) estimation for the parameter p of a Bernoulli distribution, using a Beta prior. Given observed binary data and Beta prior parameters (alpha, beta), compute the MAP estimate.
from typing import List, Dict
def bernoulli_map(
data: List[int],
alpha_prior: float = 1.0,
beta_prior: float = 1.0
) -> Dict[str, float]:
n = len(data)
successes = sum(data)
failures = n - successes
# Posterior is Beta(alpha_prior + successes, beta_prior + failures)
alpha_post = alpha_prior + successes
beta_post = beta_prior + failures
# MAP estimate for Beta distribution
# Mode of Beta(a, b) = (a - 1) / (a + b - 2) when a > 1 and b > 1
if alpha_post > 1 and beta_post > 1:
p_map = (alpha_post - 1) / (alpha_post + beta_post - 2)
elif alpha_post <= 1 and beta_post <= 1:
# Bimodal, return 0.5 as convention
p_map = 0.5
elif alpha_post <= 1:
p_map = 0.0
else:
p_map = 1.0
# MLE for comparison
p_mle = successes / n if n > 0 else 0.5
return {
"p_map": round(p_map, 4),
"p_mle": round(p_mle, 4),
"alpha_posterior": round(alpha_post, 4),
"beta_posterior": round(beta_post, 4),
"n_observations": n,
"n_successes": successes
}