【问题标题】:How to perform Kernel Density Estimation in Tensorflow如何在 Tensorflow 中执行核密度估计
【发布时间】:2018-09-22 10:19:09
【问题描述】:

我正在尝试在 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 不允许您遍历张量。我的问题是,是否有办法使上述算法与X 一起作为tf.Tensortf.Variable 工作?

【问题讨论】:

    标签: python tensorflow kernel-density


    【解决方案1】:

    我为这个问题找到的一个答案解决了拟合 KDE 和一举预测概率的问题。不过,实现有点hacky。

    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 对象时创建的占位符。

    【讨论】:

      猜你喜欢
      • 2011-04-28
      • 2020-04-23
      • 1970-01-01
      • 2017-05-09
      • 2018-10-06
      • 2021-01-25
      • 2020-04-18
      • 2012-01-06
      • 2011-08-07
      相关资源
      最近更新 更多