gpt4 book ai didi

python - 在函数中调用 patsy 时的命名空间问题

转载 作者:行者123 更新时间:2023-11-28 16:25:48 27 4
gpt4 key购买 nike

我正在尝试为 statsmodels 公式 API 编写一个包装器(这是一个简化版本,该函数的功能不止于此):

import statsmodels.formula.api as smf

def wrapper(formula, data, **kwargs):
return smf.logit(formula, data).fit(**kwargs)

如果我将此函数提供给用户,然后用户尝试定义他/她自己的函数:

def square(x):
return x**2

model = wrapper('y ~ x + square(x)', data=df)

他们将收到一个NameError,因为patsy 模块正在wrapper 的命名空间中查找函数square。是否有一种安全的 Pythonic 方式来处理这种情况,而无需先验地知道函数名称是什么或需要多少函数?

仅供引用:这是针对 Python 3.4.3 的。

最佳答案

statsmodels 使用 patsy 包解析公式并创 build 计矩阵。 patsy 允许用户函数作为公式的一部分,并在用户命名空间或环境中获取或评估用户函数。

作为引用参见 http://patsy.readthedocs.org/en/latest/API-reference.html 中的 eval_env 关键字

from_formula 是实现 patsy 公式接口(interface)的模型方法。它使用eval_env 向patsy 提供必要的信息,默认为用户的调用环境。这可以由用户使用相应的关键字参数覆盖。

定义 eval_env 的最简单方法是作为一个整数来指示 patsy 应该使用的堆栈级别。 from_formula 正在增加它以考虑 statsmodels 方法中的附加级别。

根据评论,eval_env = 2 将使用创建模型级别的下一个更高级别,例如使用 model = smf.logit(..., eval_env=2)

这将创建模型、调用 patsy 并创 build 计矩阵,model.fit() 将对其进行估计并返回结果实例。

关于python - 在函数中调用 patsy 时的命名空间问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36798992/

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