Python statsmodels OLS:如何将学习的模型保存到文件中

24

我正在尝试使用Python的statsmodels库学习普通最小二乘模型,如此处所述。

sm.OLS.fit() 返回已学习的模型。是否有一种方法可以将其保存到文件并重新加载? 我的训练数据非常庞大,学习模型需要约半分钟。因此,我想知道OLS模型中是否存在保存/加载功能。

我尝试在模型对象上使用repr()方法,但它没有返回任何有用的信息。

2个回答

48
模型和结果实例都具有保存和加载方法,因此您不需要直接使用pickle模块。
编辑以添加示例:
import statsmodels.api as sm

data = sm.datasets.longley.load_pandas()

data.exog['constant'] = 1

results = sm.OLS(data.endog, data.exog).fit()
results.save("longley_results.pickle")

# we should probably add a generic load to the main namespace
from statsmodels.regression.linear_model import OLSResults
new_results = OLSResults.load("longley_results.pickle")

# or more generally
from statsmodels.iolib.smpickle import load_pickle
new_results = load_pickle("longley_results.pickle")

编辑2:我们现在已经在主要的statsmodels API中添加了一个load方法,因此您只需要执行以下操作:

new_results = sm.load('longley_results.pickle')

3
如果你只使用已保存的结果和模型进行预测,那么可以剥离训练数据(但很多方法将不能再使用)。更多信息请参见statsmodels.sourceforge.net/devel/generated/statsmodels.regression.linear_model.RegressionResults.save.html。 - Josef
当然。编辑以添加一个例子。 - jseabold
它在GitHub的主分支上,并将包含在下一个版本中。如果你想现在使用它,你需要从源代码进行安装。 - jseabold
有没有其他的策略可以保存在 JSON 文件中? - Denis C
您可以像使用pickle模块一样使用json模块(或pandasjson)将结果对象转储为json。我们计划在下一个版本中添加内置功能。 - jseabold
显示剩余2条评论

7
我已经安装了statsmodels库,并发现你可以使用Python中的pickle模块保存值。

通过save/load,模型和结果可进行pickle化,可选择保存模型数据。 [源代码]

例如:

假设您已将结果保存在变量“results”中:

要保存文件:

import pickle    
with open('learned_model.pkl','w') as f:
  pickle.dump(results,f)

阅读文件:

import pickle
with open('learned_model.pkl','r') as f:
  model_results = pickle.load(f)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接