Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基于直方图的概率密度估计_Python_Histogram_Probability_Estimation - Fatal编程技术网

Python 基于直方图的概率密度估计

Python 基于直方图的概率密度估计,python,histogram,probability,estimation,Python,Histogram,Probability,Estimation,如何对每一个边缘区域进行基于直方图的概率密度估计 该数据集的分布p(x1)和p(x2): import numpy as np import matplotlib.pyplot as plt linalg = np.linalg N = 100 mean = [1,1] cov = [[0.3, 0.2],[0.2, 0.2]] data = np.random.multivariate_normal(mean, cov, N) L = linalg.cholesky(cov) # print

如何对每一个边缘区域进行基于直方图的概率密度估计 该数据集的分布p(x1)和p(x2):

import numpy as np
import matplotlib.pyplot as plt
linalg = np.linalg

N = 100
mean = [1,1]
cov = [[0.3, 0.2],[0.2, 0.2]]
data = np.random.multivariate_normal(mean, cov, N)
L = linalg.cholesky(cov)
# print(L.shape)
# (2, 2)
uncorrelated = np.random.standard_normal((2,N))
data2 = np.dot(L,uncorrelated) + np.array(mean).reshape(2,1)
# print(data2.shape)
# (2, 1000)
plt.scatter(data2[0,:], data2[1,:], c='green')    
plt.scatter(data[:,0], data[:,1], c='yellow')
plt.show()
为此,您可以在Matlab或R中使用hist函数。如何更改箱子 宽度(或等效的箱子数量)会影响绘图和估算 p(x1)和p(x2)


我正在使用Python,是否有类似于Matlab中的hist函数的东西以及如何实现它?

Matlab
hist
函数在matplotlib中实现为(您猜到了)。它以箱子的数量为参数绘制直方图。要计算直方图而不进行打印,请使用Numpy函数

要估计概率分布,可以使用中的分布。您根据正态分布生成了上述数据。要使此数据符合正态分布,请使用。下面是一个代码示例,用于绘制数据的直方图,并使其符合正态分布:

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

N = 100
mean = [1,1]
cov = [[0.3, 0.2],[0.2, 0.2]]
data = np.random.multivariate_normal(mean, cov, N)
L = linalg.cholesky(cov)
# print(L.shape)
# (2, 2)
uncorrelated = np.random.standard_normal((2,N))
data2 = np.dot(L,uncorrelated) + np.array(mean).reshape(2,1)
# print(data2.shape)
# (2, 1000)
plt.figure()
plt.scatter(data2[0,:], data2[1,:], c='green')    
plt.scatter(data[:,0], data[:,1], c='yellow')
plt.show()

# Plotting histograms and fitting normal distributions
plt.subplot(211)
plt.hist(data[:,0], bins=20, normed=1, alpha=0.5, color='green')
plt.hist(data2[0,:], bins=20, normed=1, alpha=0.5, color='yellow')
x = np.arange(-1, 3, 0.001)
plt.plot(x, norm.pdf(x, *norm.fit(data[:,0])), color='green')
plt.plot(x, norm.pdf(x, *norm.fit(data2[0,:])), color='yellow')
plt.title('Var 1')

plt.subplot(212)
plt.hist(data[:,1], bins=20, normed=1, alpha=0.5, color='green')
plt.hist(data2[1,:], bins=20, normed=1, alpha=0.5, color='yellow')
x = np.arange(-1, 3, 0.001)
plt.plot(x, norm.pdf(x, *norm.fit(data[:,1])), color='green')
plt.plot(x, norm.pdf(x, *norm.fit(data2[1,:])), color='yellow')
plt.title('Var 2')

plt.tight_layout()

当我试着运行它时,我得到了以下错误:plt.hist(data[:,0],bins=20,normed=1,alpha=0.5,color='green')NameError:name'data'没有定义对我有效。您确定执行了
data=np.random.multivariable\u normal(平均值,cov,N)