4

scipy我可以通过简单地运行使用库来执行高斯核密度估计

from scipy import stats
kernel = stats.gaussian_kde(data)

但我想将协方差固定为某个预定义的值并用它执行 KDE。有没有一种简单的方法可以在不显式编写优化过程的情况下实现这一点python(如果没有提供此类功能的现有库,我会这样做,但我希望避免它)。

4

1 回答 1

3

从我的评论:

通常,对于密度估计,所涉及的高斯函数用作“窗口”函数,并且该窗口的“协方差”(实际上是一维情况下的带宽参数)只是为了控制窗口的响应如何下降为被测点的距离函数。我不熟悉任何试图使用特定的多元协方差结构来实现这种窗口衰减效果的 KDE 程序。

我还猜想,在实践中建议的最复杂的这种“协方差”将是对角矩阵,您只需为数据的每个维度使用不同的带宽参数。也许(而且可能非常脆弱)您可以对数据的主要方向进行某种 PCA 分解并将不同的带宽放在那里,但我认为除非数据方向具有截然不同的规模,否则这不太可能得到回报,在在这种情况下,您最好先对输入进行评分,然后再进行 KDE,并使用一个带宽。

如果您阅读 scikits.learn 中的KDE 示例以及他们的 KernelDensity的文档,似乎(如 SciPy)它们只是为您提供了一个带宽功能(单个浮点数)来总结内核响应应该下降的方式离开。

对我来说,这表明对多变量带宽设置进行大量控制并没有太大的实际意义。最好的办法是执行一些评分或标准化,以使输入变量具有相同的比例(以便在每个方向上以相同比例进行平滑处理),然后使用 KDE 预测或分类值转换后的空间,如果您想返回到原始缩放空间,则对每个坐标应用逆变换。

于 2013-09-10T15:49:58.350 回答