gpt4 book ai didi

python - 可以修剪 statsmodels 结果进行序列化吗?

转载 作者:行者123 更新时间:2023-11-30 22:28:38 24 4
gpt4 key购买 nike

我正在尝试构建一个分布式按需建模生产系统,并希望在内存中保留数十万个小模型(并将它们传输到数据库以及在进程之间传输)。我正在查看 statsmodels。

我最感兴趣的只是能够保存模型的系数并调用模型的预测。

看起来 statsmodels 包含大量附加信息(O(原始数据大小)),而这些信息对于该用例来说是不需要的。序列化的大小有几兆字节,而系数的大小只有几个字节。这会填满我的数据库并降低分布式处理和缓存性能,其中大量时间花在简单的序列化和反序列化上。通过在内存中保留两个数量级的模型,删除非系数数据可能会导致两个数量级的加速。

在statsmodels中,有没有通用的方法:

  • 我可以要求不生成非输出系数数据,或者
  • 从对象中删除它,或者
  • 提取系数(这很容易)以及使用它们进行预测的方法(这似乎不太容易)

我正在使用各种 statsmodels 模型,但主要是 GLM 和 Logit。

我看起来并不平凡。结果对象引用模型对象,模型对象引用原始数据。我无法使其适用于单个模型,但是(通过一一删除字段)。但是否有适用于所有模型的通用方法?

最佳答案

Statsmodels 在结果类中有一个 remove_data 方法,正是为此目的而添加的。首先,大多数结果都是延迟计算的,因此在调用fit之后,返回的结果实例还不包含很多结果统计信息。但是,它保留对模型和基础数据的引用,以根据需要计算这些结果统计数据。例如,调用 results.summary() 需要计算其中的许多或大部分。

如果我们不需要计算这些统计数据,因为我们已经拥有了所有想要的统计数据,或者我们只想进行预测,那么我们可以删除所有大型数组和数据以减少内存需求。这是通过调用 results.remove_data() 来完成的。

http://www.statsmodels.org/devel/generated/statsmodels.discrete.discrete_model.LogitResults.remove_data.html

https://github.com/statsmodels/statsmodels/issues/1729

请注意,模型和结果类维护一个应删除内容的白名单。在某些情况下,白名单可能不完整。 (在这种情况下,我们将不胜感激错误报告。)

需要注意的是,帕西的配方不能被腌制。因此,无论是否使用 remove_data 进行酸洗,当前都需要在使用公式时重新创建公式,如果环境不包含所需信息,这可能不起作用。如果 patsy 用于转换新数据以进行预测,则这是相关的。如果不使用公式则无关紧要。

问题的最后一部分:目前没有独立的预测函数。预测方法被硬编码在模型内部,或 GLM 中的链接函数。因此,目前无法在不创建模型实例的情况下进行预测。 (在最简单的情况下,例如仅使用 numpy 数组,它甚至不需要是具有完整数据集的模型。)

关于python - 可以修剪 statsmodels 结果进行序列化吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46577285/

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