Плотность плотности вероятности по образцу с помощью matplotlib - программирование
Подтвердить что ты не робот

Плотность плотности вероятности по образцу с помощью matplotlib

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

4b9b3361

Ответ 1

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

import numpy as np
from matplotlib import pyplot as plt

def my_dist(x):
    return np.exp(-x ** 2)

x = np.arange(-100, 100)
p = my_dist(x)
plt.plot(x, p)
plt.show()

Если у вас нет точного распределения в качестве аналитической функции, возможно, вы можете создать большой образец, взять гистограмму и как-то сгладить данные:

import numpy as np
from scipy.interpolate import UnivariateSpline
from matplotlib import pyplot as plt

N = 1000
n = N/10
s = np.random.normal(size=N)   # generate your data sample with N elements
p, x = np.histogram(s, bins=n) # bin it into n = N/10 bins
x = x[:-1] + (x[1] - x[0])/2   # convert bin edges to centers
f = UnivariateSpline(x, p, s=n)
plt.plot(x, f(x))
plt.show()

Вы можете увеличить или уменьшить s (коэффициент сглаживания) в вызове функции UnivariateSpline для увеличения или уменьшения сглаживания. Например, используя два, вы получаете: dist to func

Ответ 2

Что вам нужно сделать, так это использовать gaussian_kde из пакета scipy.stats.kde.

учитывая ваши данные, вы можете сделать что-то вроде этого:

from scipy.stats.kde import gaussian_kde
from numpy import linspace
# create fake data
data = randn(1000)
# this create the kernel, given an array it will estimate the probability over that values
kde = gaussian_kde( data )
# these are the values over wich your kernel will be evaluated
dist_space = linspace( min(data), max(data), 100 )
# plot the results
plt.plot( dist_space, kde(dist_space) )

Плотность ядра можно настроить по желанию и с легкостью обрабатывать N-мерные данные. Это также позволит избежать искажений сплайнов, которые вы можете увидеть на графике, заданном askewchan.

enter image description here