gpt4 book ai didi

python - 如何持久化 patsy DesignInfo?

转载 作者:IT老高 更新时间:2023-10-28 22:19:30 26 4
gpt4 key购买 nike

我正在开发一个“预测模型即服务”的应用程序,其结构如下:

  • 离线训练模型
  • 定期将模型参数上传到“预测服务器”
  • 预测服务器将单个观察值作为输入,并输出预测结果

我正在尝试使用 patsy,但遇到以下问题:当单个预测进入时,如何将其转换为正确的形状,使其看起来像一行训练数据?

patsy 文档提供了当训练数据中的 DesignInfo 在内存中可用时的示例:http://patsy.readthedocs.io/en/latest/library-developers.html#predictions

# offline model training
import patsy

data = {'animal': ['cat', 'cat', 'dog', 'raccoon'], 'cuteness': [3, 6, 10, 4]}
eq_string = "cuteness ~ animal"


dmats = patsy.dmatrices(eq_string,data)
design_info = dmats[1].design_info
train_model(dmats)


# online predictions
input_data = {'animal': ['raccoon']}

# if the DesignInfo were available, I could do this:
new_dmat = build_design_matrices([design_info], input_data)
make_prediction(new_dmat, trained_model)

然后是输出:

[DesignMatrix with shape (1, 3)
Intercept animal[T.dog] animal[T.raccoon]
1 0 1
Terms:
'Intercept' (column 0)
'animal' (columns 1:3)]

注意这一行与训练数据的形状相同;它有一列用于animal[T.dog]。在我的应用程序中,我无法访问 DesignInfo 来为新数据构建 DesignMatrix。具体来说,预测服务器如何知道训练数据中有多少其他类别的动物以及按什么顺序?

我以为我可以 pickle 它,但事实证明这还不支持:https://github.com/pydata/patsy/issues/26

我也可以简单地将矩阵列作为字符串保存并从该字符串在线重建矩阵,但这似乎有点脆弱。

有什么好办法吗?

最佳答案

假设您的目标是能够在不重新训练的情况下重新启动服务器,看起来您最好的选择(直到 patsy 实现 pickle )是 pickle dataeq_string以及由 train_model 计算的任何参数。然后在重新启动服务器后,您可以取消选中 dataeq_string 并再次调用 dmats = patsy.dmatrices(eq_string,data)。这应该运行得非常快,因为它并没有真正训练模型,只是预处理你的数据。然后,您还将解开由 train_model 计算的参数(问题中未显示),并且服务器应该准备好对新输入进行预测。

请注意,如果您将其拆分为客户端和服务器组件,则服务器应执行上述所有操作,并且客户端应仅向其发送问题中定义的 input_data。 (客户端永远不需要查看 dmatsdesign_info。)

关于python - 如何持久化 patsy DesignInfo?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36958879/

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