Python график функции правдоподобия

Как я могу построить оценку максимального правдоподобия в Python

Я рисую несколько примеров из экспоненциального распространения. В моем первом эксперименте я рисую 1000 образцов, а для второго я рисую 10 000 образцов из этого дистрибутива. (с numpy.random.exponential) Я хотел бы визуально сравнить разницу в оценке максимального правдоподобия двух моих экспериментов. (так как это экспоненциальное распределение, MLE будет просто образцом среднего, поэтому с моим вторым экспериментом MLE должен быть ближе к истинной плотности). Как я могу сделать такое сравнение в Python? Я знаю, как рисовать графику в matplotlib, но здесь я не знаю, какой тип графики я должен использовать.

Я не думаю, что понимаю. У вас есть два MLE. Это два числа. Существует не так много информации, которую вы можете получить с помощью графика вместо того, чтобы просто смотреть на сами цифры. Кроме того, вы можете рассчитать MLE для множества размеров выборки и размера графика в сравнении с MLE. Затем сравните его с фактическим значением. Это может быть лучше.

Извините за путаницу. Я хочу построить что-то вроде этого: nipy.sourceforge.net/nitime/_images/ar_est_2vars_01.png . Я хочу показать истинную плотность и мои оценочные версии.

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

Читайте также:  Замена шаблона в питоне

да, я использую MLE, чтобы получить оценку для параметра плотности. но я хочу создать для этого модную визуализацию. Я хочу сравнить процесс, когда у нас есть маленькие выборки, и когда у нас большие выборки (поэтому при 10000 выборок оценка будет намного ближе к истинному параметру, чем 1000 выборок . ). Построение только размера против MLE не было фантастическим, так как у меня есть только 2 размера.

Ну, вы знаете функцию экспоненциальной плотности. Для диапазона значений x рассчитайте значения плотности для реальных и оценочных параметров и нанесите их на график. Но учтите, что даже 1000 — это довольно большой размер выборки. Таким образом, ваша оценка будет довольно близка к реальной стоимости. Возможно, вы не увидите такой большой разницы в плотности.

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

1 ответ

Учитывая замечания в комментариях, я думаю, что следующее: вот что вы ищете:

import numpy as np import matplotlib.pyplot as plt def plot_exponential_density(mu, xmax, fmt, label): x = np.arange(0, xmax, 0.1) y = 1/mu * np.exp(-x/mu) plt.plot(x, y, fmt, label=label) def sample_and_plot(N, color): # first sample N valus samples = np.zeros( (N,1) ) for i in range(0,N): samples[i] = np.random.exponential() # determine the mean mu = np.mean(samples) print("N = %d ==> mu = %f" % (N, mu)) # plot a histogram of the samples (n, bins) = np.histogram(samples, bins=int(np.sqrt(N)), density=True) plt.step(bins[:-1], n, color=color, label="samples N = %d" % N) xmax = max(bins) # plot the density according to the estimated mean plot_exponential_density(mu, xmax, color + "--", label="estimated density N = %d" % N) return xmax # sample 100 values, draw a histogram, and the density according to # the estimated mean xmax1 = sample_and_plot(100, 'r') # do the same for 1000 samples xmax2 = sample_and_plot(10000, 'b') # finally plot the true density plot_exponential_density(1, max(xmax1, xmax2), 'k', "true density") # add a legend plt.legend() # and show the plot plt.show() 

Изображение 466760

Я использовал 100 и 10000 выборок, так как с 1000 образцами оценка уже очень хороша. Но все же, имея всего 100 образцов, я несколько удивлен, насколько хороша оценка среднего и, следовательно, плотности. Учитывая только гистограмму без знания того, что образцы взяты из экспоненциального распределения, я не уверен, что я бы узнал экспоненциальное распределение здесь.

Источник

Русские Блоги

Python реализует оценку максимального правдоподобия

концепция

В действительности функция распределения вероятностей любой случайной величины неизвестна.
Если предполагается, что случайная величина подчиняется определенному распределению (например, нормальному распределению), параметры распределения могут быть рассчитаны статистическими методами. Этот метод называется оценкой параметров.

Оценка максимального правдоподобия (оценка максимального правдоподобия, MLE) — это метод оценки параметров, в котором используются известные результаты выборки для обратного вывода значений параметров, которые с наибольшей вероятностью приведут к таким результатам.

установка

Если случайная величина X подчиняется математическому ожиданию, μ μ μ , Дисперсия σ 2 σ^2 σ 2 Нормальное распределение, обозначенное как N ( μ , σ 2 ) N(μ,σ^2) N ( μ , σ 2 )

import numpy as np from scipy.stats import norm import matplotlib.pyplot as plt μ = 30 # Математическое ожидание σ = 2 # Дисперсия x = μ + σ * np.random.randn(10000) # Нормальное распределение plt.hist(x, bins=100) # Отображение гистограммы plt.show() print(norm.fit(x)) # Вернуться к оценке максимального правдоподобия, предполагаемые параметры примерно 30 и 2 

Ссылки

Источник

Оценка максимального правдоподобия: как это работает и реализация в Python

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

Эта статья является частью серии, в которой рассматривается математическая основа оптимизации портфеля и объясняется ее реализация в Оптимальном портфолио.

Оценщик максимального правдоподобия

Сначала мы начнем с понимания, что такое оценка максимального правдоподобия (MLE) и как ее можно использовать для оценки распределения данных. Оценщики максимального правдоподобия, когда указано конкретное распределение, считаются параметрическими оценщиками.

По сути, MLE стремится максимизировать вероятность появления каждой точки данных при заданном наборе параметров распределения вероятностей. Другими словами, чтобы найти набор параметров для распределения вероятностей, которое максимизирует вероятность (правдоподобие) точек данных. Формально это можно выразить как

Проблема с оптимизацией этой суммы вероятностей заключается в том, что почти всегда используются довольно неприятные экспоненты параметров, что значительно усложняет поиск оптимального значения. Следовательно, вводится понятие логарифмической вероятности. Логарифм правдоподобия — это, по сути, логарифм вероятности появления точки данных. Формально,

Преимущество использования логарифмической вероятности двоякое:

  1. Показатели в функции плотности вероятности стали более управляемыми и легко оптимизируемыми.
  2. Произведение вероятностей становится суммой, которая позволяет максимизировать отдельные компоненты, вместо того, чтобы работать с произведением n функций плотности вероятности.

Концепция MLE на удивление проста. Сложность заключается в эффективном применении этого метода для оценки параметров распределения вероятностей с учетом данных. Прежде чем обсуждать реализации, мы должны разработать математическое обоснование того, работает ли MLE во всех случаях. Для этого примите во внимание следующее:

Какую функцию следует развернуть, чтобы найти параметры. Добавленный коэффициент 1 / n, очевидно, не влияет на максимальное значение, но необходим для нашего доказательства. Учитывать

Это ожидаемое значение логарифма правдоподобия при истинных параметрах. Другими словами, в этом заключается некое понятие логарифмической вероятности нашей цели. Закон больших чисел гласит, что среднее арифметическое случайных величин iid сходится к ожидаемому значению случайных величин, когда количество точек данных стремится к бесконечности. Следовательно, мы можем доказать, что

Это означает, что MLE согласован и сходится к истинным значениям параметров при наличии достаточного количества данных.

MLE Студент-т

Поскольку обычный вводный пример для MLE всегда гауссовский, я хочу объяснить, используя немного более сложное распределение, распределение Стьюдента. Также этот дистрибутив использовался в моей реализации Оптимальное портфолио. Разница между использованием Гаусса и Стьюдента-t заключается в том, что распределение Стьюдента не дает аналитического решения MLE. Следовательно, нам нужно исследовать какую-либо форму алгоритма оптимизации, чтобы решить эту проблему. Это дает нам возможность изучить алгоритм максимизации ожидания (EM). Алгоритм EM по существу вычисляет ожидаемое значение логарифма правдоподобия с учетом данных и предварительного распределения параметров, а затем вычисляет максимальное значение этого ожидаемого значения функции логарифмического правдоподобия с учетом этих параметров. В общем, первый шаг — это

Это повторяется до тех пор, пока значения параметров не сойдутся или не достигнут заданного порога точности. Этот алгоритм можно относительно легко применить к распределению Стьюдента. Важным фактом является то, что параметры распределения Стьюдента-t взяты из гамма-распределения, и, следовательно, ожидаемое значение, вычисленное на первом этапе, будет следующим:

Где d — размер случайной величины, а M известен как расстояние Махаланобиса, которое определяется как:

После того, как это вычислено, мы можем вычислить максимум логарифма правдоподобия для распределения Стьюдента-t, которое, как оказывается, имеет аналитическое решение, которое является

Вычисление этих оценок и ожидаемых значений может повторяться до сходимости. В Python это будет выглядеть примерно так:

import pandas as pd import numpy as np def expectation_max(data, max_iter=1000): data = pd.DataFrame(data) mu0 = data.mean() c0 = data.cov() for j in range(max_iter): w = [] # perform the E part of algorithm for i in data: wk = (5 + len(data))/(5 + np.dot(np.dot(np.transpose(i - mu0), np.linalg.inv(c0)), (i - mu0))) w.append(wk) w = np.array(w) # perform the M part of the algorithm mu = (np.dot(w, data))/(np.sum(w)) c = 0 for i in range(len(data)): c += w[i] * np.dot((data[i] - mu0), (np.transpose(data[i] - mu0))) cov = c/len(data) mu0 = mu c0 = cov return mu0, c0

Вывод

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

Источник

Оцените статью