You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在zfit中创建固定参数并修改其浮动状态?

嘿,刚好之前在zfit里处理过类似的参数固定需求,这俩问题都有很直接的解决办法,我给你一步步讲清楚:

1. 创建参数时直接固定

在zfit里创建Parameter对象的时候,只需要在初始化时加上floating=False参数,就能直接把这个参数设为固定状态,不会在拟合过程中被优化。举个例子:

import zfit

# 创建一个固定值为5的参数,不会参与拟合优化
fixed_param = zfit.Parameter("fixed_param", value=5, floating=False)

这样这个参数的值就会一直保持初始设定的5,拟合器完全不会碰它。

2. 多组拟合中修改参数浮动状态

你提到的“定义非浮动参数”和“修改状态”其实可以通过set_floating()方法灵活控制,而且参数的浮动状态和边界设置是完全独立的——你说的“创建无边界参数无法使其固定”应该是个误解,无边界只是参数的取值范围限制,和它是否参与拟合优化没有关系。

具体操作:

  • 定义非浮动参数:有两种方式

    1. 像上面说的,创建时直接加floating=False
    2. 先创建普通浮动参数,之后调用param.set_floating(False)把它改成固定状态
  • 修改参数浮动状态:不管参数有没有设置边界,随时可以用set_floating(True/False)切换它的状态,完美适配多组拟合的场景。比如下面这个多阶段拟合的例子:

import zfit

# 先创建几个初始为浮动状态的参数(其中mu是无边界参数)
mu = zfit.Parameter("mu", value=1)  # 无边界参数
sigma = zfit.Parameter("sigma", value=0.5, lower=0.1, upper=2)
bg = zfit.Parameter("bg", value=10, lower=1, upper=100)

# 第一组拟合:固定mu和sigma,只优化bg
mu.set_floating(False)
sigma.set_floating(False)
# 这里执行第一组拟合的逻辑(创建模型、损失函数、运行 minimizer)
# ...

# 第二组拟合:放开mu,继续固定sigma,优化mu和bg
mu.set_floating(True)
sigma.set_floating(False)
# 这里执行第二组拟合的逻辑
# ...

# 第三组拟合:所有参数都放开优化
mu.set_floating(True)
sigma.set_floating(True)
bg.set_floating(True)
# 执行第三组拟合
# ...

哪怕是无边界的mu,只要调用set_floating(False)就能把它固定住,完全不受边界设置的影响。

内容的提问来源于stack exchange,提问作者jonas-eschle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 06:26:07