Python Scipy:不同核密度估计方法的比较?

Python Scipy:不同核密度估计方法的比较?,python,scipy,statistics,Python,Scipy,Statistics,在python中,有几种进行内核密度估计的方法,我想知道它们之间的区别,并做出一个好的选择 它们是: scipy.stats.gaussian_kde, sklearn.neights.KernelDensity statsmodel 我认为我们可以与1d、2d、带宽选择、实现和性能 我只有使用sklearn.neights.KernelDensity的经验。以下是我所知道的: 速度通常很快,可以在多维上执行,但在确定带宽时没有帮助 我查看了scipy.kde,它似乎有一个带宽选择方法 选择

在python中,有几种进行内核密度估计的方法,我想知道它们之间的区别,并做出一个好的选择

它们是:

  • scipy.stats.gaussian_kde,

  • sklearn.neights.KernelDensity

  • statsmodel

  • 我认为我们可以与
    1d、2d
    带宽选择
    实现
    性能

    我只有使用sklearn.neights.KernelDensity的经验。以下是我所知道的:

    速度通常很快,可以在多维上执行,但在确定带宽时没有帮助

    我查看了
    scipy.kde
    ,它似乎有一个带宽选择方法

    选择模型超参数的“sklearn方法”是网格搜索,通过交叉验证选择最佳值。请看一个如何将其应用于核密度估计的示例。

    选择模型超参数的“sklearn方法”是网格搜索,通过交叉验证选择最佳值。请看一个如何将其应用于内核密度估计的示例。

    这篇文章似乎正是您想要的:

    我将在这里重点比较Python中当前可用的KDE的实际实现。(…)我知道在SciPy/Scikits堆栈中有四种KDE实现:

    • 在SciPy中:gaussian_kde
    • 在Statsmodels中:KDEUnivariate和KDEMultivariate
    • 在Scikit中学习:KernelDensity
    每种方法都有优点和缺点,并且都有其适用范围

    看起来这篇文章正是您想要的:

    我将在这里重点比较Python中当前可用的KDE的实际实现。(…)我知道在SciPy/Scikits堆栈中有四种KDE实现:

    • 在SciPy中:gaussian_kde
    • 在Statsmodels中:KDEUnivariate和KDEMultivariate
    • 在Scikit中学习:KernelDensity
    每种方法都有优点和缺点,并且都有其适用范围


    谢谢,这是非常有用的信息。在
    sklearn
    文档中没有提到它。它更多的是一个适用于所有类型模型的一般原则,而不仅仅是内核密度,页面中有更多关于grid serach的信息,只是尝试了一下,
    cv
    对我来说太慢了。我得到的数据集大小约为50000点。它是5倍,(0.1,1,10)。有什么方法可以加快搜索速度吗?你可以尝试设置
    GridSearchCV(n_jobs=4)
    (或者不管你有多少个内核)来并行运行搜索,这应该会加快速度,但是网格和交叉验证本质上很慢。。。这是你为他们拥有更好的统计特性所付出的代价,但这是你所做的一个感性判断,它实际上并不是过度拟合,尽管看起来可能是这样,网格serach正在最小化交叉验证的均方误差——这意味着它在随机选择的观测集上训练模型,在一个以前从未见过的单独集上进行测试,并重复n次。从统计学上讲,这将使您在未来的数据上比您喜欢的更简单的模型有更好的性能。(尽管出于可解释性的原因,您可能更喜欢一个更简单的模型,这是一个合理的理由)谢谢,这是非常有用的。在
    sklearn
    文档中没有提到它。它更多的是一个适用于所有类型模型的一般原则,而不仅仅是内核密度,页面中有更多关于grid serach的信息,只是尝试了一下,
    cv
    对我来说太慢了。我得到的数据集大小约为50000点。它是5倍,(0.1,1,10)。有什么方法可以加快搜索速度吗?你可以尝试设置
    GridSearchCV(n_jobs=4)
    (或者不管你有多少个内核)来并行运行搜索,这应该会加快速度,但是网格和交叉验证本质上很慢。。。这是你为他们拥有更好的统计特性所付出的代价,但这是你所做的一个感性判断,它实际上并不是过度拟合,尽管看起来可能是这样,网格serach正在最小化交叉验证的均方误差——这意味着它在随机选择的观测集上训练模型,在一个以前从未见过的单独集上进行测试,并重复n次。从统计学上讲,这将使您在未来的数据上比您喜欢的更简单的模型有更好的性能。(尽管出于可解释性的原因,您可能更喜欢更简单的模型,这是一个有效的理由)