代码之家  ›  专栏  ›  技术社区  ›  udothemath

如何使用python pickle库(或任何有效的其他库)保存scikit学习多分类器模型[重复]

  •  1
  • udothemath  · 技术社区  · 7 年前

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

    例如,(最小工作示例)

    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()))
    

    1 回复  |  直到 7 年前
        1
  •  14
  •   Ryan Walker    7 年前

    可以将多个对象保存到同一个pickle中:

    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