Когда я впервые услышал термин оценка максимального правдоподобия, я пошел в Google и выяснил, что он означает. Затем я зашел в Википедию, чтобы узнать, что это на самом деле означает. Получил вот что:

В статистике оценка максимального правдоподобия (MLE) - это метод оценки параметров статистической модели данных наблюдений путем нахождения значений параметров, которые максимизируют вероятность проведения наблюдений с учетом параметров. MLE можно рассматривать как частный случай максимальной апостериорной оценки (MAP), которая предполагает равномерное априорное распределение параметров, или как вариант MAP, который игнорирует апостериорную оценку и, следовательно, является нерегуляризованным. ».

Хорошо ??

Чтобы избавить вас от борьбы, необходимой для понимания и включения MLE в ваш рабочий процесс, идеал и проекты в области науки о данных, я составил это руководство. Ниже мы:

  • Установите вероятностный контекст для MLE
  • Погрузитесь в математику
  • Посмотрите, как MLE работает в Python
  • Изучите передовой опыт в области науки о данных с MLE

Но сначала немного xkcd:

Частиквентисты против байесовцев

Это забавно (если вы следите за этой странной областью юмора) и в основном правильно насчет различий между двумя лагерями. Не говоря уже о том, что переход нашего Солнца в новую звезду на самом деле не является повторяемым экспериментом - извините, частотники! - мы можем обобщить, что для реальных наблюдений и исследований оба лагеря обычно приходят к одинаковым выводам, но сильно различаются, когда дизайн исследования или данные начинают усложняться.

Вкратце, MLE помогает нам ответить на этот вопрос:

Какие параметры / коэффициенты лучше всего подходят для моей модели?

И что интересно, вы можете использовать любую из этих школ, чтобы объяснить, почему работает MLE! Потому что, хотя MLE дает точечную оценку - что является обычным для частотных выходов - ее можно рассматривать как частный случай максимальной апостериорной (MAP) оценки, когда мы используем наивную априорную оценку и никогда не пытаемся ее обновить.

Настройка нашей проблемы

Чтобы подойти к MLE сегодня, давайте подойдем к байесовскому ракурсу и воспользуемся теоремой Байеса, чтобы сформулировать наш вопрос как таковой:

P(β∣y) = P(y∣β) x P(β) / P(y)

Или на английском:

posterior = likelihood x prior / evidence

Мы можем эффективно игнорировать prior и evidence, потому что - учитывая определение Wiki равномерного предварительного распределения - все значения коэффициентов равновероятны. И вероятность всех значений данных (предположим, непрерывных) равновероятна и в основном равна нулю.

Итак, на реальном английском языке: вероятность некоторых конкретных коэффициентов, учитывая, что я вижу некоторые результаты, связана с постановкой вопроса прямо противоположным образом. Что помогает, потому что этот вопрос НАМНОГО проще решить.

Вероятность и правдоподобие

Теперь мы введем понятие вероятности, или L, в наш код и впредь. Чтобы понять разницу, я приведу отрывки из отличного поста Рэнди Галлистела:

Различие между вероятностью и правдоподобием принципиально важно: вероятность связана с возможными результатами; вероятность придает гипотезам.

Возможные результаты являются взаимоисключающими и исчерпывающими. Предположим, мы просим испытуемого предсказать исход каждого из 10 подбрасываний монеты. Есть только 11 возможных результатов (от 0 до 10 правильных прогнозов). Фактический результат всегда будет один и один из возможных результатов. Таким образом, вероятности, связанные с возможными результатами, должны в сумме равняться 1.

Гипотезы, в отличие от результатов, не исключают друг друга и не являются исчерпывающими. Предположим, что первый испытуемый правильно предсказывает 7 из 10 результатов. Я мог бы предположить, что испытуемый просто угадал, а вы могли бы предположить, что испытуемый может быть в некоторой степени ясновидящим, что означает, что от испытуемого можно ожидать правильного предсказания результатов с немного большей вероятностью, чем вероятность долгий пробег. Это разные гипотезы, но они не исключают друг друга, потому что вы оговорились, сказав «может быть». Тем самым вы позволили своей гипотезе включить и мою. Говоря технической терминологией, моя гипотеза вложена в вашу. Кто-то другой может выдвинуть гипотезу о том, что субъект обладает сильным ясновидением и что наблюдаемый результат недооценивает вероятность того, что ее следующее предсказание будет правильным. Другой человек может выдвинуть совершенно другую гипотезу. Гипотезам, которые можно было бы выдвинуть, нет предела.

Набор гипотез, которым мы приписываем вероятность, ограничен нашей способностью их выдумать. На практике мы редко можем быть уверены, что выдумали все возможные гипотезы. Наша задача - оценить, в какой степени экспериментальные результаты влияют на относительную вероятность гипотез, которые мы и другие в настоящее время придерживаемся. Поскольку мы обычно не принимаем во внимание полный набор альтернативных гипотез и поскольку некоторые из них вложены в другие, вероятности, которые мы связываем с нашими гипотезами, сами по себе не имеют никакого значения; только относительные вероятности, то есть отношения двух вероятностей, имеют значение.

Удивительный! Спасибо, Рэнди!

MLE является Frequentist, но может быть мотивирован с байесовской точки зрения:

  • Частые сторонники могут утверждать, что MLE является точечной оценкой (а не распределением) и предполагает отсутствие предварительного распределения (технически неинформированного или единообразного).
  • Кроме того, MLE не дают 95% вероятности истинного значения параметра.
  • Однако MLE - это особая форма MAP, в которой используется концепция вероятности, которая занимает центральное место в байесовской философии.

ОСТЕРЕГАЙТЕСЬ предположения о наивных или однообразных приорах !! Вы можете неправильно отнести данные к модели, что маловероятно. Вы можете стать жертвой парадокса Симпсона, как показано ниже. Небольшой размер выборки может легко обмануть вас.

Все вышеперечисленные проблемы - это проблемы, с которыми должны иметь дело или знать специалисты по частотам и данным, поэтому в MLE по сути нет ничего хуже.

Вернуться к нашей проблеме

Итак, если p(y|β) эквивалентно L(β|y), то p(y_1,y_2,...,y_n|β) эквивалентно L(β|y_1,y_2,...,y_n). Также помните, что мы можем умножать независимые вероятности, например:

p(A,B) = p(A)p(B)

Мы приближаемся! Вот наша текущая настройка:

L(β|y1,y2,…,yn) = p(y1|β)p(y2|β),…,p(yn|β) = ∏p(yi|β)

Эта часть справа выглядит как нечто, что мы можем максимизировать:

Но мы можем сделать даже лучше! Как насчет использования натурального журнала, чтобы превратить нашу функцию произведения в функцию суммы? Журналы - это монотонные преобразования, поэтому мы упростим вычисления, но сохраним наш оптимальный результат.

Наша окончательная функция стоимости выглядит так:

Чтобы не усложнять задачу, предположим, что у нас есть проблема регрессии, поэтому наш результат будет непрерывным. MLE отлично подходит для задач классификации с дискретными результатами, но мы должны использовать разные функции распределения, в зависимости от того, сколько у нас классов и т. Д.

Теперь, помня, что центральное допущение таких моделей, как обыкновенный метод наименьших квадратов (OLS), заключается в том, что остатки обычно распределяются вокруг среднего нуля, наша подобранная модель OLS буквально становится воплощением максимального ожидания y. А у нас распределение вероятностей… Нормальное!

Поскольку компьютеры намного лучше, чем мы при вычислении вероятностей, отсюда мы обратимся к Python!

MLE в Python

Внедрение MLE в конвейер моделирования науки о данных может быть довольно простым с использованием различных подходов. Ниже приведен один из подходов, который вы можете украсть, чтобы начать работу.

Настраивать

MLE будет легко, если вы импортируете правильные пакеты:

# import libraries
import numpy as np, pandas as pd
from matplotlib import pyplot as plt
import seaborn as sns
from scipy.optimize import minimize
import scipy.stats as stats
import pymc3 as pm3
import numdifftools as ndt
import statsmodels.api as sm
from statsmodels.base.model import GenericLikelihoodModel
%matplotlib inline

Оттуда мы будем генерировать данные, которые соответствуют нормально распределенным ошибкам вокруг наземной функции истинности:

# generate data
N = 100
x = np.linspace(0,20,N)
ϵ = np.random.normal(loc = 0.0, scale = 5.0, size = N)
y = 3*x + ϵ
df = pd.DataFrame({‘y’:y, ‘x’:x})
df[‘constant’] = 1

Наконец, давайте представим себе, используя график Сиборна:

# plot
sns.regplot(df.x, df.y);

Я получаю то, что показано ниже, и вы должны увидеть нечто подобное. Но имейте в виду, что здесь присутствует случайность, и мы не использовали сид:

Моделирование OLS с помощью статистических моделей

Поскольку мы создали непрерывные данные, подобные регрессии, мы будем использовать sm.OLS для вычисления лучших коэффициентов и логарифмического правдоподобия (LL) в качестве эталона.

# split features and target
X = df[[‘constant’, ‘x’]]
# fit model and summarize
sm.OLS(y,X).fit().summary()

Я получаю это и запишу коэффициенты подобранной модели:

Обратите внимание, что constant близко к нулю, а beta для функции x близко к 3, в соответствии с используемым нами наземным генератором истинности.

Максимизация LL для поиска оптимальных коэффициентов

Отсюда мы будем использовать комбинацию пакетов и пользовательских функций, чтобы увидеть, можем ли мы вычислить те же результаты OLS, указанные выше, с использованием методов MLE.

Поскольку scipy.optimize имеет только minimize метод, мы минимизируем отрицательное значение логарифмической вероятности. Это даже то, что рекомендуют! Математические хитрости часто оказываются быстрее и проще, чем изобретать колесо заново!

Мы можем создать простую функцию, которая делает все за один проход для выходных данных регрессии:

# define likelihood function
def MLERegression(params):
 intercept, beta, sd = params[0], params[1], params[2] # inputs are guesses at our parameters
 yhat = intercept + beta*x # predictions
# next, we flip the Bayesian question
# compute PDF of observed values normally distributed around mean (yhat)
# with a standard deviation of sd
 negLL = -np.sum( stats.norm.logpdf(y, loc=yhat, scale=sd) )
# return negative LL
 return(negLL)

Теперь, когда у нас есть функция стоимости, давайте инициализируем и минимизируем ее:

# let’s start with some random coefficient guesses and optimize
guess = np.array([5,5,2])
results = minimize(MLERegression, guess, method = ‘Nelder-Mead’, 
 options={‘disp’: True})
--------------------------------------------------------------------
Optimization terminated successfully.
         Current function value: 311.060386
         Iterations: 111
         Function evaluations: 195

Проверим результаты:

results # this gives us verbosity around our minimization
# notice our final key and associated values…
--------------------------------------------------------------------
final_simplex: (array([[0.45115297, 3.03667376, 4.86925122],
       [0.45123459, 3.03666955, 4.86924261],
       [0.45116379, 3.03667852, 4.86921688],
       [0.45119056, 3.03666796, 4.8692127 ]]), array([300.18758478, 300.18758478, 300.18758478, 300.18758479]))
           fun: 300.18758477994425
       message: 'Optimization terminated successfully.'
          nfev: 148
           nit: 80
        status: 0
       success: True
             x: array([0.45115297, 3.03667376, 4.86925122])

И мы можем очистить дальше:

# drop results into df and round to match statsmodels
resultsdf = pd.DataFrame({'coef':results['x']})
resultsdf.index=['constant','x','sigma']   
np.round(resultsdf.head(2), 4)
# do our numbers match the OLS model?
--------------------------------------------------------------------

Вы заметите, что OLS и MLE прекрасно подходят друг другу! Ваши результаты будут отличаться, так как мы не используем случайные числа.

Лучшие практики для MLE

Прежде чем мы пойдем дальше, это может быть хороший момент, чтобы укрепить наше доверие к MLE. В качестве базового показателя регрессии мы знаем, что обыкновенный метод наименьших квадратов - по определению - является лучшим линейным несмещенным оценщиком для непрерывных результатов, которые имеют нормально распределенные остатки и соответствуют другим предположениям линейной регрессии. Использует ли MLE, чтобы наши коэффициенты были надежными?

Да!

  • MLE соответствует OLS.
  • С бесконечными данными он оценит оптимальное β и хорошо его аппроксимирует для небольших, но надежных наборов данных.
  • MLE эффективен; ни одна последовательная оценка не имеет более низкой асимптотической среднеквадратической ошибки, чем MLE.

Похоже, он полностью повторяет то, что делает OLS. Тогда ... зачем использовать MLE вместо OLS?

Потому что!

  • MLE можно обобщить для регрессии и классификации!
  • MLE эффективен; ни одна последовательная оценка не имеет более низкой асимптотической ошибки, чем MLE, если вы используете правильное распределение.

Мы можем рассматривать MLE как модульный способ подбора моделей путем оптимизации вероятностной функции стоимости!

Четыре основных шага в применении MLE:

  1. Определите вероятность, убедившись, что вы используете правильное распределение для задачи регрессии или классификации.
  2. Возьмите натуральный логарифм и сведите функцию произведения к функции суммы.
  3. Максимизируйте - или минимизируйте отрицательные значения - целевой функции.
  4. Убедитесь, что единообразные априорные значения - безопасное предположение! В противном случае вы можете отнести данные к производящей функции или модели мира, которая не соответствует Закону экономии.

В пространстве MLE гораздо больше, включая категориальные распределения, использующие пакеты байесовской статистики, такие как PyMC3 и т. Д. Но на сегодня мы остановимся здесь.

Как вы используете MLE в своем рабочем процессе по науке о данных? Оставьте комментарий ниже или свяжитесь со мной в LinkedIn или Twitter!

Особая благодарность Чаду Шерреру за прекрасную рецензию.