核密度估计与抽样。
kalep的Python项目详细描述
kalepy:核密度估计与抽样
此包对多维数据执行kde操作,以便:1)计算估计的pdf(概率分布函数),以及2)从这些pdf重新采样新数据。
安装
来自PYPI(即通过PIP)
pip install kalepy
来自源(例如用于开发)
git clone https://github.com/lzkelley/kalepy.git pip install -e kalepy/
在这种情况下,可以很容易地更新包,将其更改到源目录中,拉入并重新生成:
cd kalepy git pull pip install -e . # Optional: run unit tests (using the `nosetests` package) nosetests
示例
使用“反射”边界条件改善边界
处的pdf重建没有反射,kde(红线)明显低估了这种均匀分布(灰色直方图)的边缘。从kde重新采样时,新样本(红地毯和直方图)将绘制在原始分布边缘之外。反射边界条件可以更好地估计pdf,并将新样本约束在边界内。
importkalepyaskale# here `data` has shape (N,) for N data pointskde=kale.KDE(data)grid=np.linspace(-0.5,2.5,1000)# choose reflection boundariesboundaries=[0.0,2.0]pdf=kde.pdf(grid,reflect=boundaries)samples=kde.resample(100,reflect=boundaries)
这也适用于多个维度。在每个维度中,反射边界可以被应用在两侧(例如X轴)上,或者仅在一侧(例如Y轴)上。
importkalepyaskale# here `data` has shape (2,N) 2-parameters and N data pointskde=kale.KDE(data)xc,yc=np.meshgrid([np.linspace(-0.5,2.5,100),np.linspace(-3.0,2.5,200)])grid=np.vstack([xc.ravel(),yc.ravel()])# choose reflection boundaries in each parameterboundaries=[[0.0,2.0],[None,2.0]]pdf=kde.pdf(grid,reflect=boundaries)samples=kde.resample(1000,reflect=boundaries)
不同直方图参数与不同核的比较
在“箱子宽度”和“箱子来源”中的选择会在直方图的显示方式上产生显著的差异。一般来说,这两个参数都是任意选择的。kde在内核的使用和带宽(平滑量)方面也有自由度,但是有一些启发式方法可以优化这些参数。特别地,对于一般数据,抛物线/epanechnikov核在减少偏差方面是最优的,并且可以使用scott方法估计带宽。
计算目标参数的投影/边缘化pdf
# 2-parameter data, shaped (2,N) for N data-pointskde=kale.KDE(data)# Create bins in each dimensionedges=[np.linspace(-7.5,10.5,100),np.linspace(-3,9,100)]xe,ye=np.meshgrid(*edges)# Grid of test pointsgrid=np.vstack([xe.ravel(),ye.ravel()])# Calculate 2D PDFpdf_2d=kde.pdf(grid)# Calculate each 1D PDFpdf_x=kde.pdf(edges[0],param=0)pdf_y=kde.pdf(edges[1],param=1)