持久化分类器模型并逐步训练它的正确方法是什么?

时间:2017-08-05 00:48:15

标签: python scikit-learn classification pickle

我正在编写一个文本分类器,它查看一堆字符串并对它们进行分类。我每天都会从应用程序中生成大量这些字符串。假设我今天第一次运行我的脚本。我会将模型与我到目前为止的所有字符串相匹配。此时我想将模型保存在磁盘上。

明天,我将加载模型并使用它来预测新字符串集上的标签。然后我将手动查看预测。那些错误制作的,我将更正标签并将它们作为新的训练集提供,以改进它。等等!

问题:

  1. pickle倾销并加载正确/推荐的方式来保持模型吗?
  2. 如果我在经过预先训练的模型上运行'fit'(从pickle加载),它会从头开始进行新的装配吗?还是会增加它的知识?
  3. 这就是我在做的事情:

    ## learn.py
    train_data  = ['list', 'of', 'input', 'strings']
    labels      = ['list', 'of', 'output', 'labels']
    tfidf_vec   = TfidfVectorizer()
    clf         = MultinomialNB()
    
    # build tf-idf matrix
    train_tfidf = tfidf_vec.fit_transform(data)
    
    # train classifier
    clf.fit(train_tfidf, labels)
    
    # persist vocabulary and model
    with open('model.pkl', 'wb') as outf:
        pickle.dump(tfidf_vec, outf) # need to save vocabulary and tfidf
        pickle.dump(clf, outf)       # need to save the classifier
    
    
    
    ## predict.py
    test_data  = ['list', 'of', 'strings', 'to', 'classify']
    labels     = ['list', 'of', 'output', 'labels']
    
    # load tfidf_vec and clf from pickle
    with open('model.pkl', 'rb') as inf:
        tfidf_vec = pickle.load(inf)
        clf = pickle.load(inf)
    
    # compute tfidf of new strings with learned vocabulary
    test_tfidf = tfidf_vec.transform(test_data)
    
    # predict labels
    predicted = clf.predict(test_tfidf)
    

    这可以按预期工作。但我想知道这是否是坚持不懈的正确方法。 而且,下次当我运行learn.py时,我如何才能增加知识,而不是让它从头开始学习?即使没有持久性,如果我在同一个脚本中连续两次运行'fit',它是否适合从头开始?

0 个答案:

没有答案