gpt4 book ai didi

python - 如何在 Tensorflow 中执行核密度估计

转载 作者:行者123 更新时间:2023-12-05 07:35:01 25 4
gpt4 key购买 nike

我正在尝试在 Tensorflow 中编写核密度估计算法。

在拟合 KDE 模型时,我遍历当前批处理中的所有数据,并为每个数据创建一个使用 tensorflow.contrib.distributions.MultivariateNormalDiag 对象的内核:
self.kernels = [MultivariateNormalDiag(loc=data, scale=bandwidth) for data in X]

稍后,当尝试根据上面拟合的模型预测数据点的可能性时,对于我正在评估的每个数据点,我将上面每个内核给出的概率相加:
tf.reduce_sum([kernel._prob(X) for kernel in self.kernels], axis=0)

此方法仅在 X 是 numpy 数组时有效,因为 TF 不允许您迭代 Tensor。我的问题是是否有办法使上述算法作为 tf.Tensortf.Variable 使用 X

最佳答案

我为这个问题找到的一个答案解决了安装 KDE 和一次性预测概率的问题。不过,实现方式有点老套。

def fit_predict(self, data):
return tf.map_fn(lambda x: \
tf.div(tf.reduce_sum(
tf.map_fn(lambda x_i: self.kernel_dist(x_i, self.bandwidth).prob(x), self.fit_X)),
tf.multiply(tf.cast(data.shape[0], dtype=tf.float64), self.bandwidth[0])), self.X)

第一个 tf.map_fn 遍历我们正在计算可能性的数据,将每个单独内核的概率加在一起。

第二个 tf.map_fn 遍历我们用来拟合模型的所有数据,并创建一个 tf.contrib.distributions.Distribution(这里是参数化的通过 kernel_dist)。

self.Xself.fit_X 是在初始化 KernelDensity 对象时创建的占位符。

关于python - 如何在 Tensorflow 中执行核密度估计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49793557/

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