it-swarm.com.ru

Подгонка нормального распределения к 1D данным

У меня есть 1-мерный массив, и я могу вычислить «среднее» и «стандартное отклонение» этого образца и построить «нормальное распределение», но у меня есть проблемы:

Я хочу построить данные и нормальное распределение на том же рисунке, как показано ниже:

Я не знаю, как построить и «ДАННЫЕ» и «Нормальное распределение»

любая идея о "гауссовской функции плотности вероятности в scipy.stats"?

s = np.std(array)
m = np.mean(array)
plt.plot(norm.pdf(array,m,s))
32
Jax

Вы можете использовать matplotlib для построения гистограммы и PDF (как в ссылке в ответе @ MrE). Для подгонки и вычисления PDF вы можете использовать scipy.stats.norm, как показано ниже.

import numpy as np
from scipy.stats import norm
import matplotlib.pyplot as plt


# Generate some data for this demonstration.
data = norm.rvs(10.0, 2.5, size=500)

# Fit a normal distribution to the data:
mu, std = norm.fit(data)

# Plot the histogram.
plt.hist(data, bins=25, density=True, alpha=0.6, color='g')

# Plot the PDF.
xmin, xmax = plt.xlim()
x = np.linspace(xmin, xmax, 100)
p = norm.pdf(x, mu, std)
plt.plot(x, p, 'k', linewidth=2)
title = "Fit results: mu = %.2f,  std = %.2f" % (mu, std)
plt.title(title)

plt.show()

Вот график, сгенерированный сценарием:

Plot

72
Warren Weckesser

Чтобы увидеть как нормальное распределение, так и ваши фактические данные, вы должны представить свои данные в виде гистограммы, а затем нарисовать над ними функцию плотности вероятности. Смотрите пример на http://docs.scipy.org/doc/numpy/reference/generated/numpy.random.normal.html , чтобы узнать, как это сделать.

3
YXD

Существует гораздо более простой способ сделать это с помощью seaborn:

import seaborn as sns
from scipy.stats import norm

data = norm.rvs(5,0.4,size=1000) # you can use a pandas series or a list if you want

sns.distplot(data)

Результат

для получения дополнительной информации: seaborn.distplot

0
LonelyDaoist