← Назад к вопросам

Что такое оценка апостериорного максимума (MAP)?

2.0 Middle🔥 161 комментариев
#Машинное обучение

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI30 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Maximum A Posteriori (MAP): Байесовский подход к оценке параметров

Определение

MAP (Оценка апостериорного максимума) - это метод оценивания неизвестных параметров путём нахождения значения, которое максимизирует апостериорное распределение вероятности.

В отличие от MLE (Maximum Likelihood Estimation),
MAP учитывает приоритетные знания (prior) о параметрах.

Теорема Байеса

P(θ|D) = P(D|θ) * P(θ) / P(D)

где:
P(θ|D) = апостериорное распределение (posterior)
P(D|θ) = функция правдоподобия (likelihood)
P(θ) = приоритетное распределение (prior)
P(D) = свидетельство (normalization constant)

Интуитивно:

Постериор = (правдоподобие * приор) / нормализация

Апостериор показывает: какова вероятность параметра θ,
учитывая как данные, так и приоритетные знания?

Визуально

Prior (приоритетное знание):
    |       __
    |      /  \
    |     /    \
    |____/______\____
   -5    0     5
   
Вероятнее всего, θ ≈ 0

Likelihood (данные):
    |            ___
    |           /   \
    |          /     \
    |_________/       \
   -5   3    5    7
   
Данные предлагают θ ≈ 5

Posterior (результат):  
    |         ___
    |        /   \
    |       /     \
    |______/       \
   -5   2  4   6
   
Компромисс! θ ≈ 3-4
Учли и приор, и данные

Формула MAP

θ_MAP = arg max P(θ|D)
        θ
      
      = arg max [P(D|θ) * P(θ) / P(D)]
        θ
      
      = arg max [P(D|θ) * P(θ)]  # P(D) не зависит от θ
        θ      
Таким образом:

MAP = arg max [Likelihood * Prior]

Сравнение: MLE vs MAP

MLE (Maximum Likelihood Estimation):
θ_MLE = arg max P(D|θ)

Учитывает только данные, игнорирует приор.
Есть мало данных → может быть переобучение.

MAP (Maximum A Posteriori):
θ_MAP = arg max [P(D|θ) * P(θ)]

Учитывает и данные, и приоритетные знания.
Приор действует как регуляризация.
Лучше с малым количеством данных.

Пример 1: Монета

Кидаем монету 10 раз, получаем 8 орлов и 2 решки.
Оценить вероятность выпадения орла (θ).

MLE подход (игнорируем приор):
       θ_MLE = 8/10 = 0.8
       
Модель предлагает: монета смещена к орлам на 80%
(но мало данных, может быть случайностью)

MAP подход (учитываем приор):

Приор: Beta(2, 2)
Интерпретация: ожидаем справедливую монету (θ ≈ 0.5)

Постериор = Likelihood * Prior
          = Binomial(8|10, θ) * Beta(2, 2)
          = Beta(2+8, 2+2)  # свойство сопряженных распределений
          = Beta(10, 4)

θ_MAP = (10-1)/(10-1+4-1) = 9/12 = 0.75

Результат: 0.75 вместо 0.8
Смысл: мы более консервативны, учитываем убеждение что монета честная

Пример 2: Нормальное распределение

import numpy as np
from scipy.stats import norm

# Данные: измерение температуры
observations = [20.1, 19.8, 20.2, 20.0, 19.9]  # средняя ≈ 20

# MLE для параметра μ (среднее)
mu_mle = np.mean(observations)  # 20.0

# MAP с приором
# Prior: ожидаем μ = 18 (комната обычно холоднее)
# Prior = Normal(18, σ=2)  # уверены в 18, но не абсолютно

# Для нормального распределения:
# μ_MAP = (σ_prior^{-2} * μ_prior + n * σ_{data}^{-2} * μ_mle) / (σ_prior^{-2} + n * σ_{data}^{-2})

sigma_prior = 2
mu_prior = 18
n = len(observations)
sigma_data = np.std(observations)

# Вычисли MAP
prior_precision = 1 / (sigma_prior ** 2)
data_precision = n / (sigma_data ** 2)

mu_map = (prior_precision * mu_prior + data_precision * mu_mle) / (prior_precision + data_precision)

print(f"MLE: {mu_mle:.2f}")
print(f"MAP: {mu_map:.2f}")
# MLE: 20.00
# MAP: 19.88 (сдвинуто к приору)

Практический пример: Bayesian Linear Regression

from sklearn.linear_model import Ridge, LinearRegression

# Данные
X = [[1], [2], [3], [4], [5]]
y = [2, 4, 5, 4, 5]

# MLE подход: обычная линейная регрессия
mle_model = LinearRegression()
mle_model.fit(X, y)
print(f"MLE coefficient: {mle_model.coef_[0]:.3f}")  # может быть любым

# MAP подход: Ridge regression (L2 регуляризация)
# Ridge добавляет приор что коэффициенты близки к 0
map_model = Ridge(alpha=1.0)  # alpha контролирует силу приора
map_model.fit(X, y)
print(f"MAP coefficient: {map_model.coef_[0]:.3f}")  # меньше

# Объяснение:
# Ridge эквивалентна MAP с нормальным приором на коэффициенты
# alpha контролирует точность приора

Выбор Prior

Слабый приор (weak prior):

Normal(μ=0, σ=1000)

Очень широкий, почти плоский
В этом случае MAP ≈ MLE
Данные доминируют

Сильный приор (strong prior):

Normal(μ=0, σ=0.1)

Очень узкий
Приор доминирует
Данные мало влияют

Правильный приор:

Отражает реальное знание о параметрах
Ni слишком слабый, ни слишком сильный

Где используется MAP

1. Машинное обучение

  • Ridge Regression = MAP с нормальным приором
  • Lasso (L1) = MAP с Laplace приором
  • Логистическая регрессия с регуляризацией = MAP

2. Компьютерное зрение

Image denoising:
Приор: соседние пиксели должны быть похожи
Данные: зашумленное изображение
MAP: чистое изображение

3. NLP

Тема моделирование:
Приор: сколько тем в документе
Данные: слова в документе
MAP: распределение тем

Вычисление MAP на практике

import numpy as np
from scipy.optimize import minimize

# Логарифм апостериора (для оптимизации)
def log_posterior(theta, data, prior):
    log_likelihood = np.sum(np.log(likelihood(data, theta)))
    log_prior = np.log(prior(theta))
    return log_likelihood + log_prior

# Найди максимум
result = minimize(
    lambda theta: -log_posterior(theta, data, prior),
    x0=[0],  # начальное значение
    method='BFGS'
)

theta_map = result.x[0]
print(f"MAP estimate: {theta_map}")

MAP vs Posterior Mean

MAP: arg max P(θ|D)
Находит моду (максимум) апостериора

Posterior Mean: E[θ|D] = ∫ θ * P(θ|D) dθ
Находит среднее апостериора

Для симметричного распределения:
MAP ≈ Posterior Mean

Для асимметричного:
Могут сильно отличаться!

Преимущества и недостатки

Преимущества:

  1. Учитывает приоритетные знания
  2. Регуляризация (как защита от переобучения)
  3. Может работать с малым количеством данных
  4. Интерпретируемо

Недостатки:

  1. Требует выбрать prior (субъективно)
  2. Сложнее вычислить чем MLE
  3. Результат зависит от выбора prior
  4. Может быть предвзято если prior неправильный

Заключение

MAP - это Байесовский подход к оценке параметров, который комбинирует информацию из данных (likelihood) и приоритетные знания (prior). Результирующая апостериорная оценка более надёжна, особенно когда данных мало. Во многих способах современного ML (Ridge, Lasso) используется MAP неявно через регуляризацию.

Что такое оценка апостериорного максимума (MAP)? | PrepBro