Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.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_Statistics_Kernel Density - Fatal编程技术网

Python中的密度估计

Python中的密度估计,python,statistics,kernel-density,Python,Statistics,Kernel Density,我是Python新手,必须从2D样本估计密度。我的第一个想法是一个简单的直方图估计器,我实现如下: num = 10**4 sp = 0.01 subsetf1 = np.random.uniform(0,1,size=(num,2)) # I created this set to test the estimator def f_est(x,y,h=sp, subset=subsetf1): indicator = np.zeros(num) for i in rang

我是Python新手,必须从2D样本估计密度。我的第一个想法是一个简单的直方图估计器,我实现如下:

num = 10**4
sp = 0.01

subsetf1 = np.random.uniform(0,1,size=(num,2)) # I created this set to test the estimator

def f_est(x,y,h=sp, subset=subsetf1):
    indicator = np.zeros(num)

    for i in range(num):
        if (x <= subset[i][0] <= (x + h)) and (y <= subset[i][1] <= (y + h)):
            indicator[i] = 1
        else :  indicator[i] = 0


    return sum(indicator)/(num*h**2)

#f_est should yield values closely to 1 if  0 <x,y <1 , because  subsetf1 contains uniformly distributed values on [0,1). 
f会产生奇怪的值,这些值不可能是正确的。
如果有人能告诉我代码中的错误在哪里,或者如何在Python中使用kde,那就太好了,因为我没有找到关于这个主题的好教程。

内核密度估计值可以产生大于1的值,因为它们返回的不是概率,而是概率密度。在您的例子中,概率密度给出了每单位面积的概率,并且局部可能远大于1


好消息是,由于您的结果与scipy或statsmodels的结果相匹配,因此听起来您的代码是正确的。

您是否将您的结果与scipy的密度估计等内置函数进行了比较?或者更确切地说,我应该问,你把你的结果和什么做了比较,如果有的话?嗨,乔恩。我还尝试了scipy的密度估计,因此代码也在我的帖子中。问题是scipys densitys的估计结果完全错误,我不知道为什么。对不起,我没有看到这一点。Scipy的另一种选择是statsmodels。你试过这个吗
from scipy import stats
xmin = partsetf1[0].min()
xmax = partsetf1[0].max()
ymin = partsetf1[1].min()
ymax = partsetf1[1].max()
X, Y = np.mgrid[xmin:xmax:100j, ymin:ymax:100j]
positions = np.vstack([X.ravel(), Y.ravel()])
values = np.vstack([partsetf1[0], partsetf1[1]])
gkde=stats.gaussian_kde(values)
f = np.reshape(gkde(positions).T, X.shape)