【问题标题】:Python fastKDE beyond limits of data pointsPython fastKDE 超出数据点的限制
【发布时间】:2017-04-06 23:08:50
【问题描述】:

我正在尝试使用 fastKDE 包 (https://pypi.python.org/pypi/fastkde/1.0.8) 来查找 2D 图中某个点的 KDE。但是,我想知道超出数据点限制的 KDE,但不知道如何做到这一点。

使用上面链接的网站上列出的代码;

#!python

import numpy as np
from fastkde import fastKDE
import pylab as PP

#Generate two random variables dataset (representing 100000 pairs of datapoints)
N = 2e5
var1 = 50*np.random.normal(size=N) + 0.1
var2 = 0.01*np.random.normal(size=N) - 300

#Do the self-consistent density estimate
myPDF,axes = fastKDE.pdf(var1,var2)

#Extract the axes from the axis list
v1,v2 = axes

#Plot contours of the PDF should be a set of concentric ellipsoids centered on
#(0.1, -300) Comparitively, the y axis range should be tiny and the x axis range
#should be large
PP.contour(v1,v2,myPDF)
PP.show()

我能够找到数据范围内任何点的 KDE,但是我如何找到点 (0,300) 的 KDE,而不必将它包含到 var1 和 var2 中。我不想用这个数据点计算 KDE,我想知道那个时候的 KDE。

我想我真正想做的是给 fastKDE 一个数据的直方图,这样我就可以自己设置它的轴了。我只是不知道这是否可能?

干杯

【问题讨论】:

    标签: python kernel-density


    【解决方案1】:

    我在寻找此问题的解决方案时遇到了这篇文章。类似于 KDTree 的构建,您可以只计算每个网格维度中的步长,然后通过将点值与轴的开头相减并除以该维度的步长,最后将其四舍五入即可获得查询点的索引关闭,将其转换为整数,瞧。以一维为例:

    def fastkde_test(test_x):
        kde, axes = fastKDE.pdf(test_x, numPoints=num_p)
        x_step = (max(axes)-min(axes)) / len(axes)
        x_ind = np.int32(np.round((test_x-min(axes)) / x_step))
        return kde[x_ind]
    

    在这种情况下,test_x 既是定义 KDE 的集合,又是查询集。在我的情况下,这样做会稍微快 10 倍(至少在 1D 中,更高维度尚未测试),并且与 KDTree 查询基本相同。

    我希望这对以后遇到这个问题的人有所帮助,就像我刚才所做的那样。

    编辑:如果您的查询点超出了计算 KDE 的范围,则此方法当然只能为您提供与 KDTree 查询相同的结果,即您的 KDE 网格的相应边框。但是,您必须通过在最高索引处剪切生成的 x_ind 来对其进行硬编码,即 `len(axes)-1'。

    【讨论】:

      【解决方案2】:

      我也一直在尝试使用此代码并遇到相同的问题。我所做的(代替一个好的 N-D 外推器)是从 fastKDE 返回的网格点构建一个 KDTree(使用 scipy.spatial),并找到离我要评估的点最近的网格点。然后我在该点查找相应的 pdf 值(如果不是相同的零,它应该在 pdf 网格边缘附近很小)并相应地分配该值。

      【讨论】:

        猜你喜欢
        • 2012-04-23
        • 2022-01-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多