【问题标题】:How to save scikit-learn MULTIPLE classifier models with python pickle library (or any efficient others) [duplicate]如何使用 python pickle 库(或任何有效的其他库)保存 scikit-learn MULTIPLE 分类器模型 [重复]
【发布时间】:2018-04-03 02:21:59
【问题描述】:

一般来说,我们可以使用pickle来保存ONE分类器模型。有没有办法在一个泡菜中保存多个分类器模型?如果是,我们如何保存模型并在以后检索它?

例如,(最小的工作示例)

from sklearn import model_selection
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from numpy.random import rand, randint 

models = []
models.append(('LogisticReg', LogisticRegression(random_state=123)))
models.append(('DecisionTree', DecisionTreeClassifier(random_state=123)))
# evaluate each model in turn
results_all = []
names = []
dict_method_score = {}
scoring = 'f1'

X = rand(8, 4)
Y = randint(2, size=8)

print("Method: Average (Standard Deviation)\n")
for name, model in models:
    kfold = model_selection.KFold(n_splits=2, random_state=999)
    cv_results = model_selection.cross_val_score(model, X, Y, cv=kfold, scoring=scoring)
    results_all.append(cv_results)
    names.append(name)
    dict_method_score[name] = (cv_results.mean(), cv_results.std())
    print("{:s}: {:.3f} ({:.3f})".format(name, cv_results.mean(), cv_results.std()))

目的:使用相同的设置更改一些超参数(例如交叉验证中的 n_splits)并稍后检索模型。

【问题讨论】:

  • 感谢您提供更多信息。我正在考虑保存“模型”。但正如@RyanWalker 所建议的那样,本质上这些只是对象。

标签: python scikit-learn pickle


【解决方案1】:

您可以将多个对象保存到同一个泡菜中:

with open("models.pckl", "wb") as f:
    for model in models:
         pickle.dump(model, f)

然后您可以一次将一个模型加载回内存:

models = []
with open("models.pckl", "rb") as f:
    while True:
        try:
            models.append(pickle.load(f))
        except EOFError:
            break

【讨论】:

  • 感谢您干净利落的回复。
猜你喜欢
  • 1970-01-01
  • 2015-04-27
  • 2018-07-01
  • 2021-01-19
  • 1970-01-01
  • 1970-01-01
  • 2018-10-10
相关资源
最近更新 更多