pymc3 具有来自核密度估计的自定义似然函数

2024-02-13

我正在尝试将 pymc3 与从一些观察数据派生的似然函数一起使用。这些观察到的数据不符合任何好的标准分布,所以我想根据这些观察来定义我自己的数据。

一种方法是对观测值使用核密度估计。这在 pymc2 中是可能的,但与 pymc3 中的 Theano 变量不能很好地配合。

在下面的代码中,我只是生成一些正态分布的虚拟数据。正如我之前所说,我基本上假设我的观察结果呈均匀分布。

这是我的代码:

from scipy import stats
import numpy as np
import pymc3 as pm
from sklearn.neighbors.kde import KernelDensity

data = np.sort(stats.norm.rvs(loc=0, scale=1, size=1000))
kde = KernelDensity(kernel='gaussian', bandwidth=0.1).fit(data.reshape(-1, 1))

def get_log_likelihood(x):
    return kde.score_samples(x)

with pm.Model() as test_model:
    x = pm.Uniform('prior rv', lower=-10, upper=10)
    obs = pm.DensityDist('observed likelihood', get_log_likelihood, observed={'x': x})

    step = pm.Metropolis()
    trace = pm.sample(200, step=step)

我收到的错误似乎是 kdescore_samples函数因为期望数组而爆炸,但是x是一个 Theano 变量。

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-49-4efbbe7376dc> in <module>()
      1 with pm.Model() as test_model:
      2     x = pm.Uniform('prior rv', lower=0.0, upper=1e6)
----> 3     obs = pm.DensityDist('observed likelihood', get_log_likelihood, observed={'x': x})
      4 
      5     step = pm.Metropolis()

~/research_notebooks/venv/lib/python3.6/site-packages/pymc3/distributions/distribution.py in __new__(cls, name, *args, **kwargs)
     40             total_size = kwargs.pop('total_size', None)
     41             dist = cls.dist(*args, **kwargs)
---> 42             return model.Var(name, dist, data, total_size)
     43         else:
     44             raise TypeError("Name needs to be a string but got: {}".format(name))

~/research_notebooks/venv/lib/python3.6/site-packages/pymc3/model.py in Var(self, name, dist, data, total_size)
    825             with self:
    826                 var = MultiObservedRV(name=name, data=data, distribution=dist,
--> 827                                       total_size=total_size, model=self)
    828             self.observed_RVs.append(var)
    829             if var.missing_values:

~/research_notebooks/venv/lib/python3.6/site-packages/pymc3/model.py in __init__(self, name, data, distribution, total_size, model)
   1372         self.missing_values = [datum.missing_values for datum in self.data.values()
   1373                                if datum.missing_values is not None]
-> 1374         self.logp_elemwiset = distribution.logp(**self.data)
   1375         # The logp might need scaling in minibatches.
   1376         # This is done in `Factor`.

<ipython-input-48-535f58ce543b> in get_log_likelihood(x)
      1 def get_log_likelihood(x):
----> 2     return kde.score_samples(x)

~/research_notebooks/venv/lib/python3.6/site-packages/sklearn/neighbors/kde.py in score_samples(self, X)
    150         # For it to be a probability, we must scale it.  For this reason
    151         # we'll also scale atol.
--> 152         X = check_array(X, order='C', dtype=DTYPE)
    153         N = self.tree_.data.shape[0]
    154         atol_N = self.atol * N

~/research_notebooks/venv/lib/python3.6/site-packages/sklearn/utils/validation.py in check_array(array, accept_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, ensure_min_samples, ensure_min_features, warn_on_dtype, estimator)
    431                                       force_all_finite)
    432     else:
--> 433         array = np.array(array, dtype=dtype, order=order, copy=copy)
    434 
    435         if ensure_2d:

ValueError: setting an array element with a sequence.

任何帮助将不胜感激。谢谢!


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

pymc3 具有来自核密度估计的自定义似然函数 的相关文章

随机推荐

  • 简单的客户端/服务器、TCP/IP 加密消息流、SSL

    编写一个小型 TCP IP 客户端服务器应用程序 基本上它会创建一个服务器 然后您可以创建几个不同的客户端并设置一些聊天会话 我想知道是否有任何方法可以使用标准 net 库合并某种形式的加密 m mainSocket new Socket
  • 从 HTTPS 页面到 HTTP URL 的 AJAX 请求

    我有一种情况 我需要从一个 HTTPS 页面到另一个不安全的页面 在不同的域上 执行 AJAX 请求 我们已经实施了 CORS 策略 并且在我们的网站上使用 HTTPS 之前它运行良好 有什么办法可以让这个工作吗 根据 W3 的说法 由于
  • 将文件和目录连同提交历史记录一起移动到子目录中

    如何将目录和文件以及提交历史记录移动到子目录 例如 源码目录结构 project x files sub dirs 目标目录结构 project x p q files sub dirs 要添加到布马古利斯 https stackoverf
  • .Net lib来控制远程GDB [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 您可以对遗留代码库做哪些对提高质量影响最大的事情?

    当您在遗留代码库中工作时 随着时间的推移 什么会对提高代码库的质量产生最大的影响 删除未使用的代码 删除重复的代码 添加单元测试以提高覆盖率较低的测试覆盖率 跨文件创建一致的格式 更新第三方软件 减少静态分析工具 即 Findbugs 生成
  • 具有 CSS 和 HTML 的水平家谱 - 反向

    我在网上搜索并找到了一个很好的家谱示例在代码笔这里 http codepen io anon pen bdLeNe 我想要同样的东西 但旋转了180度 我想以 16 名成员开始我的家谱 并从左到右降序 16 8 4 2 1 如何通过使用 编
  • del 语句与调用 __delitem__ 总是 100% 相同吗?

    a something iterable object in python del a 1 Is del a 1 总是一样a delitem 1 是Python吗del语句定义为调用 delitem method The del陈述 htt
  • 向上按钮调用父 Activity 的 OnDestroy

    首先 我想澄清一些事情 我正在努力使用的按钮不是back按钮 我指的是up home应用程序顶部的 ActionBar Toolbar 中的按钮 而不是底部的 Android 按钮 有几个posts https stackoverflow
  • 将特定 TensorFlow 变量恢复到特定层(按名称恢复)

    假设我训练了一个 TensorFlow 模型并保存了它 现在有一个不同的模型 并且我想将保存的模型中的一些权重用于模型中的某些层 它们具有相同的形状 现在 我能够找到如何从模型中保存特定变量 具有特定名称 但我无法找到任何按名称恢复这些变量
  • 如何将挂起函数作为显式参数传递给协程构建器?

    我正在调查launch协程构建器将协程代码作为block suspend CoroutineScope gt Unit 我们通常将代码作为 lambda 传递 但是 我想知道如何将此函数作为显式参数传递给启动函数 coroutineScop
  • 如何使用gson处理动态响应数据? (json 到 java 对象)

    这是 Json 用户列表 response result users name ABC age 20 gender F name cbd age 23 gender M 有时会像这样返回 response result
  • 使用 Tornado 广播消息

    我有一个发送消息的应用程序 该消息应该广播到每个当前连接的客户端 假设客户数量可能达到数千 如何在不阻塞的情况下实现这个广播逻辑 我认为会阻止的示例代码 clients class Broadcaster tornado websocket
  • Arm Cortex A9交叉编译奇怪的浮点行为

    我正在尝试将更大的应用程序从 x86 移植到 arm cortex a9 但在交叉编译应用程序时 我遇到了像 modf 这样的浮点函数的奇怪分段错误 其他 libc 函数似乎处理浮点数错误 但不会崩溃 见下文 所以我尝试了这个小测试程序 它
  • android.content.UriMatcher 的含义

    Uri Matcher 是什么android content UriMatcher 如何使用它 有人可以解释一下以下三行代码的含义吗 uriMatcher new UriMatcher UriMatcher NO MATCH uriMatc
  • C# 中的 Directory.GetFiles() 模式匹配

    我在用着Directory GetFiles 根据给定模式列出文件 这对于我正在寻找的大多数模式 例如 zip rar sfv 都适用 这就是我准备清单的方式 或多或少 问题在于我想列出的数字 0 001 到 0 999 的模式 alArr
  • 如何更改选定文本的颜色?

    请左键单击并拖动此文本 标记它 您看到的颜色是蓝色 我想使用 Javascript 或 HTML CSS 将该颜色更改为深绿色 浏览器支持有限 selection background ffb7b7 Safari moz selection
  • 了解 ldd 输出

    如何ldd知道这取决于libc so 6 not libc so 5 or libc so 7 libc so 6 gt lib64 libc so 6 0x00000034f4000000 lib64 ld linux x86 64 so
  • 无法从 WP8 上 SD 卡上的 SQLite DB 检索数据

    我在控制台应用程序中使用 System Data SQLite 创建了 SQLite DB 然后我将其移至 Windows Phone 的 SD 卡 我按照以下说明将 SQLite 支持添加到我的 WP8 应用程序 https github
  • 你能在 matplotlib 中绘制实时数据吗?

    我正在一个线程中从套接字读取数据 并希望在新数据到达时绘制和更新绘图 我编写了一个小原型来模拟事物 但它不起作用 import pylab import time import threading import random data Th
  • pymc3 具有来自核密度估计的自定义似然函数

    我正在尝试将 pymc3 与从一些观察数据派生的似然函数一起使用 这些观察到的数据不符合任何好的标准分布 所以我想根据这些观察来定义我自己的数据 一种方法是对观测值使用核密度估计 这在 pymc2 中是可能的 但与 pymc3 中的 The