当前位置: 首页 > 知识库问答 >
问题:

SciPy KDE梯度

贺季
2023-03-14

我使用的是内核密度估计(KDE)的SciPy实现(http://docs.SciPy.org/doc/SciPy/reference/generated/SciPy.stats.gaussian_kde.html),到目前为止工作良好。然而,我现在想要获得KDE在一个特定点的梯度。

我已经查看了库的Python源代码,但还没有弄清楚如何轻松实现这个功能。有人知道这样做的方法吗?

共有1个答案

欧阳学真
2023-03-14

如果您查看您引用的源代码,您将看到密度估计是根据数据集中所有点的贡献构建的,假设您目前只需要评估一个点point[:,i](第219-222行):

diff = self.dataset - points[:, i, newaxis]
tdiff = dot(self.inv_cov, diff)
energy = sum(diff * tdiff, axis=0) / 2.0
result[i] = sum(exp(-energy), axis=0)

在矩阵表示法中(没有可用的LaTeX?),将对数据集中的单个点D和点P进行编写,以求值为

d = D - p
t = Cov^-1 d
e = 1/2 d^T t
r = exp(-e)

您要查找的梯度为grad(r)=(dr/dx,dr/dy):

dr/dx = d(exp(-e))/dx 
      = -de/dx exp(-e)
      = -d(1/2 d^T Cov^-1 d)/dx exp(-e)
      = -(Cov^-1 d) exp(-e)

对于dr/dy也是如此。因此,您所需要做的就是计算项cov^-1d并将其与您已经得到的结果相乘。

result = zeros((self.d,m), dtype=float)    
[...]
diff = self.dataset - points[:, i, newaxis]
tdiff = dot(self.inv_cov, diff)
energy = sum(diff * tdiff, axis=0) / 2.0
grad = dot(self.inv_cov, diff)
result[:,i] = sum(grad * exp(-energy), axis=1)

由于某种原因,在计算grad时,我需要删除-1以获得与在pp+delta四个方向上评估密度估计一致的结果,这是一个我在这里当然可能会偏离的标志。

 类似资料:
  • 天梯(tianti) Java 轻量级的 CMS 解决方案-天梯。天梯是一个用 Java 相关技术搭建的后台 CMS 解决方案,用户可以结合自身业务进行相应扩展,同时提供了针对 dao、service 等的代码生成工具。技术选型:Spring Data JPA、Hibernate、Shiro、 Spring MVC、Layer、MySQL 等。 简介: 1、天梯是一款使用Java编写的免费的轻量级

  • 本文向大家介绍梯度消失,梯度爆炸的问题,相关面试题,主要包含被问及梯度消失,梯度爆炸的问题,时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 激活函数的原因,由于梯度求导的过程中梯度非常小,无法有效反向传播误差,造成梯度消失的问题。

  • 在本节中,我们将介绍梯度下降(gradient descent)的工作原理。虽然梯度下降在深度学习中很少被直接使用,但理解梯度的意义以及沿着梯度反方向更新自变量可能降低目标函数值的原因是学习后续优化算法的基础。随后,我们将引出随机梯度下降(stochastic gradient descent)。 一维梯度下降 我们先以简单的一维梯度下降为例,解释梯度下降算法可能降低目标函数值的原因。假设连续可导

  • 本文向大家介绍梯度消失相关面试题,主要包含被问及梯度消失时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 在神经网络中,当前面隐藏层的学习速率低于后面隐藏层的学习速率,即随着隐藏层数目的增加,分类准确率反而下降了。这种现象叫做消失的梯度问题。

  • 在求解机器学习算法的模型参数,即无约束优化问题时,梯度下降(Gradient Descent)是最常采用的方法之一,另一种常用的方法是最小二乘法。这里就对梯度下降法做一个完整的总结。 1. 梯度 在微积分里面,对多元函数的参数求∂偏导数,把求得的各个参数的偏导数以向量的形式写出来,就是梯度。比如函数f(x,y), 分别对x,y求偏导数,求得的梯度向量就是$$left ( frac{partial

  • 在训练机器学习模型时,首先对权重和偏差进行初始猜测,然后反复调整这些猜测,直到获得损失可能最低的权重和偏差为止(即模型收敛)。 而梯度下降是机器学习中最常用的计算代价函数的方法,它只需要计算损失函数的一阶导数。 假设 h(theta) 为目标函数,而 J(theta) 为损失函数, 损失函数的梯度(即偏导数)为 按参数 theta 的梯度负方向,来更新 theta,即梯度下降算法为 mini-ba