使用 pymc 与 MCMC 拟合两个正态分布(直方图)?

2024-03-28

我正在尝试拟合 CCD 上摄谱仪检测到的线轮廓。为了便于考虑,我提供了一个演示,如果解决了,它与我的演示非常相似actually想要解决。

我看过这个:https://stats.stackexchange.com/questions/46626/fitting-model-for-two-normal-distributions-in-pymc https://stats.stackexchange.com/questions/46626/fitting-model-for-two-normal-distributions-in-pymc以及其他各种问题和答案,但他们正在做的事情与我想做的事情根本不同。

import pymc as mc
import numpy as np
import pylab as pl
def GaussFunc(x, amplitude, centroid, sigma):
    return amplitude * np.exp(-0.5 * ((x - centroid) / sigma)**2)

wavelength = np.arange(5000, 5050, 0.02)

# Profile 1
centroid_one = 5025.0
sigma_one = 2.2
height_one = 0.8
profile1 = GaussFunc(wavelength, height_one, centroid_one, sigma_one, )

# Profile 2
centroid_two = 5027.0
sigma_two = 1.2
height_two = 0.5
profile2 = GaussFunc(wavelength, height_two, centroid_two, sigma_two, )

# Measured values
noise = np.random.normal(0.0, 0.02, len(wavelength))
combined = profile1 + profile2 + noise

# If you want to plot what this looks like
pl.plot(wavelength, combined, label="Measured")
pl.plot(wavelength, profile1, color='red', linestyle='dashed', label="1")
pl.plot(wavelength, profile2, color='green', linestyle='dashed', label="2")
pl.title("Feature One and Two")
pl.legend()

我的问题:PyMC(或某些变体)可以给我上面使用的两个分量的平均值、幅度和西格玛吗?

请注意,我实际适合我的实际问题的函数不是高斯函数 - 因此请提供使用通用函数的示例(如我的示例中的 GaussFunc),而不是“内置”pymc.Normal() 类型功能。

另外,我知道模型选择是另一个问题:因此,就当前的噪声而言,1 个组件(配置文件)可能就是统计上合理的全部。但我想看看 1、2、3 等组件的最佳解决方案是什么。

我也不同意使用 PyMC 的想法——如果 scikit-learn、astroML 或其他一些包看起来很完美,请告诉我!

EDIT:

我在很多方面都失败了,但我认为走在正确轨道上的事情之一如下:

sigma_mc_one = mc.Uniform('sig', 0.01, 6.5)
height_mc_one = mc.Uniform('height', 0.1, 2.5)
centroid_mc_one = mc.Uniform('cen', 5015., 5040.)

但我无法构建一个有效的 mc.model 。


不是最简洁的 PyMC 代码,但我做出这个决定是为了帮助读者。这应该运行,并给出(真正)准确的结果。

我决定使用具有自由范围的统一先验,因为我真的不知道我们在建模什么。但人们可能对质心位置有所了解,并且可以在那里使用更好的先验。

### Suggested one runs the above code first.
### Unknowns we are interested in


est_centroid_one = mc.Uniform("est_centroid_one", 5000, 5050 )
est_centroid_two = mc.Uniform("est_centroid_two", 5000, 5050 )

est_sigma_one = mc.Uniform( "est_sigma_one", 0, 5 )
est_sigma_two = mc.Uniform( "est_sigma_two", 0, 5 )

est_height_one = mc.Uniform( "est_height_one", 0, 5 ) 
est_height_two = mc.Uniform( "est_height_two", 0, 5 ) 

#std deviation of the noise, converted to precision by tau = 1/sigma**2
precision= 1./mc.Uniform("std", 0, 1)**2

#Set up the model's relationships.

@mc.deterministic( trace = False) 
def est_profile_1(x = wavelength, centroid = est_centroid_one, sigma = est_sigma_one, height= est_height_one):
    return GaussFunc( x, height, centroid, sigma )


@mc.deterministic( trace = False) 
def est_profile_2(x = wavelength, centroid = est_centroid_two, sigma = est_sigma_two, height= est_height_two):
    return GaussFunc( x, height, centroid, sigma )


@mc.deterministic( trace = False )
def mean( profile_1 = est_profile_1, profile_2 = est_profile_2 ):
    return profile_1 + profile_2


observations = mc.Normal("obs", mean, precision, value = combined, observed = True)


model = mc.Model([est_centroid_one, 
              est_centroid_two, 
                est_height_one,
                est_height_two,
                est_sigma_one,
                est_sigma_two,
                precision])

#always a good idea to MAP it prior to MCMC, so as to start with good initial values
map_ = mc.MAP( model )
map_.fit()

mcmc = mc.MCMC( model )
mcmc.sample( 50000,40000 ) #try running for longer if not happy with convergence.

重要的

请记住,该算法与标签无关,因此结果可能会显示profile1具有所有特征profile2反之亦然。

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

使用 pymc 与 MCMC 拟合两个正态分布(直方图)? 的相关文章

随机推荐

  • 无法使用 ggsurvplot 从列表中使用 survfit 对象绘制 kaplan-meier 曲线

    我正在尝试使用 survminer 包中的 ggsurvplot 绘制 Kaplan Meyer 曲线 当我传递保存在列表中的 survfit 对象时 我无法绘制它 让我以肺部数据集为例 一切正常如下 library survival li
  • Vulkan 管道顶部/底部和 ALL_COMMANDS

    作为很多 初学者 我认为使用 TOP OF PIPELINE 作为 dst 和 BOTTOM OF PIPELINE 作为 src 意味着两者的 ALL COMMANDS Here https github com KhronosGroup
  • Grails 2.0 中带有新 where 查询的参数

    在 Grails 2 0 中定义 where 查询时是否可以使用参数 例如 def query Book where id it Book sub query find 5 我尝试运行该代码 但它在调用 find 时抛出 MissingMe
  • 创建一个包含比原始元素更多元素的 ReactiveUI 派生集合

    是否可以创建一个 ReactiveUI 派生集合 其中包含比原始集合更多的元素 我已经看到有一种方法可以过滤集合并选择单个属性 但我正在寻找相当于可枚举的 SelectMany 操作 为了说明这一点 想象一下尝试获取代表每个陷入交通拥堵的乘
  • 避免 printf() 中的尾随零

    我一直在发现 printf 系列函数的格式说明符 我想要的是能够打印小数点后最大给定位数的双精度 或浮点数 如果我使用 printf 1 3f 359 01335 printf 1 3f 359 00999 I get 359 013 35
  • C# 中图片框的图像之间的转换[重复]

    这个问题在这里已经有答案了 可能的重复 Windows 窗体图片框中的图像转换 https stackoverflow com questions 3270919 transition of images in windows forms
  • 当数据回发时,MVC 如何填充模型

    MVC对于如何将数据发送到浏览器非常清楚 您访问一个 URL 它运行代码来创建模型 将该类型化模型传递到视图中 然后视图根据模型的状态呈现 HTML 然而 我发现不太清楚的是 当用户在页面上提交表单时 MVC 如何将该表单映射回模型以在控制
  • 连接字符串中包含特殊字符的密码

    我需要从 ASP NET 应用程序连接到我的 Dynamics CRM 365 本地实例 我的问题是连接帐户的密码如下 T jL4O vc t 30
  • Service Fabric 重启应用程序

    我有一个在启动时从 KeyVault 读取的服务结构应用程序 当我们更改 KeyVault 值时 我们必须重新启动节点才能读取新值 这会导致同一节点上的其他应用程序出现故障 我正在尝试编写一个 PowerShell 脚本来重新启动服务结构应
  • iOS 8 上应用内购买失败,提示用户详细信息不正确

    我们有一个带有应用内购买功能的应用程序 该应用程序在 iOS 7 上运行良好 但在 iOS 8 上 当用户尝试在应用程序中购买任何内容时 应用程序内购买会失败 并显示错误 您输入的 Apple ID 无法 找不到或您的密码不正确 请重试 即
  • __libc_start_main@plt 如何工作?

    为了研究目标文件在linux中是如何加载和运行的 我制作了最简单的c代码 文件名为simple c int main 接下来 我创建目标文件并将目标文件另存为文本文件 gcc simple c objdump xD a out gt sim
  • 使用 Perl6 语法解析二进制结构

    使用 Perl6 解析二进制结构的最佳选择是什么 在 Perl5 中 我们在 Perl6 上有 pack unpack 方法 它们似乎是实验性的 是否可以使用 Perl6 语法来解析二进制数据假设我有一个文件 其中包含以下二进制格式的记录
  • Qt 加载指示器通过动画图像(又名预加载器)还是替代方案?

    我想在加载时在我的表格视图上显示动画加载程序图像 下面的截图显示了一个印象 我为此使用了一个动画 gif 由setStyleSheet作为居中的背景图像 我面临两个问题 gif 已显示 但不是动画 是否可以显示动画 gif 作为背景图像 通
  • Celery 错误“没有这样的传输:amqp”

    Celery 工作正常 有一天命令行工作程序无法启动 并显示以下跟踪 Traceback most recent call last File home buildslave venv bin celery line 9 in
  • 如何使用 Cloudinary 将经过转换的 url 输出为字符串?

    我将在开头说这可能是错误的做法 我想做的是使用 url w transformation 到 JSdata 属性 目前 我正在使用以下内容来生成图像标签 cl image tag image asset filename to s tran
  • 将 FeedParser 对象序列化为 Atom

    我使用 feedparserhttp www feedparser org http www feedparser org 解析 Atom feed 并对生成的 Python 对象进行一些操作 之后 我想将对象序列化回 Atom 但 fee
  • React Native - 通过邮件发送照片

    我正在尝试通过邮件发送最近在应用程序中捕获的照片 但遇到以下错误 对于邮件功能 我正在使用此模块 var Mailer require NativeModules RNMail 我试图借助此模块通过邮件发送照片 但出现以下错误 index
  • 如何使用界面生成器更改 ipad 的文本字段高度?

    我们正在使用 Interface Builder 开发 iPad 应用程序 但我们不知道如何增加文本字段的高度 当我们使用 IB 为 osx 开发应用程序时 您可以转到文本字段属性 并在控制部分下将换行符设置为自动换行而不是剪辑 但是 当我
  • MultiColumnText 在 iTextSharp v5.3.3 中工作吗?

    我找不到MultiColumnTextiTextSharp v5 3 3 来自 NuGet 中的任何位置 我能找到的就是ColumnText这当然使用起来不太友好 而且超出了我真正需要的范围 我错过了什么吗 有几个链接说MultiColum
  • 使用 pymc 与 MCMC 拟合两个正态分布(直方图)?

    我正在尝试拟合 CCD 上摄谱仪检测到的线轮廓 为了便于考虑 我提供了一个演示 如果解决了 它与我的演示非常相似actually想要解决 我看过这个 https stats stackexchange com questions 46626