gpt4 book ai didi

numpy - 在 statsmodels 中重新采样 KDE(核密度估计)

转载 作者:行者123 更新时间:2023-12-04 21:04:16 24 4
gpt4 key购买 nike

我有兴趣使用点样本来构建 KDE,然后使用该 KDE 重新采样点。 scipy.stats.gaussian_kde提供了一种非常简单的方法来做到这一点。例如,从高斯分布中采样:

import numpy as np
from scipy.stats import gaussian_kde, norm

sampled = np.random.normal(loc = 0, scale = 1, size = 1000)
kde = gaussian_kde(sampled, bw_method = 'silverman')
resampled = kde.resample(1000)
scipy.stats.gaussian_kde 的一个缺陷是它为带宽选择提供了有限的选择。通读 this ,我被指向 statsmodels.nonparametric.kernel_density.KDEMultivariate (更多信息 here)。这让我可以使用交叉验证来估计最佳带宽,如果您尝试近似的基础 pdf 不是单峰的,这会更加复杂。例如,使用两个高斯的总和,我可以使用 KDEMultivariate 构建一个 KDE。如下:
from statsmodels.nonparametric.kernel_density import KDEMultivariate
sampled = np.concatenate((np.random.normal(loc = -3, scale = 1, size = 1000), \
np.random.normal(loc = 3, scale = 1, size = 1000)))
kde = KDEMultivariate(sampled, 'c', bw = 'cv_ml')

探索具有任意底层 pdf 的高维数据,很明显 KDEMultivariate能够生成更能代表原始 PDF 的 PDF。但是我遇到了一个大问题—— KDEMultivariate没有 kde.resample()方法,因此我无法从我的新 KDE 中重新采样点。是否有一种简单有效的方法可以从使用 statsmodels.nonparametric.kernel_density.KDEMultivariate 构建的 KDE 中重新采样? ?

最佳答案

使用来自 gaussian_kde 的动机在 scipy ,我写了一个简单的重采样程序。在 statsmodels ,带宽对应于每个维度中高斯核的 SD。在scipy中,带宽^2乘以数据协方差来构造协方差矩阵。

def resample(kde, size):
n, d = kde.data.shape
indices = np.random.randint(0, n, size)
cov = np.diag(kde.bw)**2
means = kde.data[indices, :]
norm = np.random.multivariate_normal(np.zeros(d), cov, size)
return np.transpose(means + norm)

这需要一个 KDEMultivariate 的实例,并通过选择随机内核对其进行重新采样,然后使用每个内核遵循多元正态分布的事实从这些内核中进行采样。

关于numpy - 在 statsmodels 中重新采样 KDE(核密度估计),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50520535/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com