【问题标题】:Scipy: Comparison of different kernel density estimation method?Scipy:不同核密度估计方法的比较?
【发布时间】:2016-06-06 03:56:33
【问题描述】:

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

他们是:

  1. scipy.stats.gaussian_kde, http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.gaussian_kde.html

  2. sklearn.neighbors.KernelDensity,http://scikit-learn.org/stable/modules/generated/sklearn.neighbors.KernelDensity.html#sklearn.neighbors.KernelDensity

  3. 统计模型 http://statsmodels.sourceforge.net/stable/nonparametric.html#kernel-density-estimation

我认为我们可以与1d, 2dbandwidth selectionImplementationperformance 进行比较

我只有sklearn.neighbors.KernelDensity 的经验。这是我所知道的:

速度一般较快,可以多维执行,但没有帮助决定带宽。

我看了scipy.kde,好像有带宽选择方法。

【问题讨论】:

    标签: python scipy statistics


    【解决方案1】:

    选择模型超参数的“sklearn 方式”是网格搜索,通过交叉验证来选择最佳值。请查看 http://mark-kay.net/2013/12/24/kernel-density-estimation/,了解如何将其应用于核密度估计的示例。

    【讨论】:

    • 谢谢,这非常有用。 sklearn 文档中没有提到它。
    • 它更多的是适用于所有类型模型的一般原则,而不仅仅是内核密度,页面中有更多关于网格搜索scikit-learn.org/stable/modules/grid_search.html的信息
    • 刚试过,cv 对我来说太慢了。我得到了大小约为 50,000 点的数据集。它是 5 倍,(0.1,1,10)。有什么办法可以加快速度?
    • 你可以尝试设置GridSearchCV(n_jobs=4)(或者你有多少核心)来并行运行搜索,这应该会加快速度,但是网格和交叉验证本质上很慢......这是您为拥有更好的统计属性而付出的代价
    • 好的,但这是您做出的审美判断,实际上并没有过度拟合,尽管看起来确实如此,网格搜索正在最小化交叉验证均方误差 -- 这意味着它在随机选择的一组观察值上训练模型,在一个以前从未见过的单独组上对其进行测试,然后重复此操作 n 次。从统计学上讲,与您喜欢的更简单模型相比,这将为您提供更好的未来数据性能。 (尽管出于可解释性的原因,您可能更喜欢更简单的模型,这是一个正当的理由)
    【解决方案2】:

    看起来Kernel Density Estimation in Python 的文章正是您要找的:

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

    • 在 SciPy 中:gaussian_kde。
    • 在 Statsmodels 中:KDEUnivariate 和 KDEMultivariate。
    • 在 Scikit-learn 中:KernelDensity。

    各有优缺点,各有适用范围。

    【讨论】:

      猜你喜欢
      • 2011-08-07
      • 2015-12-12
      • 1970-01-01
      • 2017-09-05
      • 2017-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-05
      相关资源
      最近更新 更多