如何使用scikit learn加载以前保存的模型并用新的训练数据扩展模型



我使用scikit learn保存了一个逻辑回归模型,其中unigram是训练集1的特征。是否可以加载此模型,然后使用第二个训练集(训练集2)中的新数据实例进行扩展?如果是,如何做到这一点?之所以这样做,是因为我对每个训练集使用了两种不同的方法(第一种方法涉及特征破坏/正则化,第二种方法涉及自我训练)。

为了清晰起见,我添加了一些简单的示例代码:

from sklearn.linear_model import LogisticRegression as log
from sklearn.feature_extraction.text import CountVectorizer as cv
import pickle
trainText1 # Training set 1 text instances    
trainLabel1 # Training set 1 labels 
trainText2 # Training set 2 text instances    
trainLabel2 # Training set 2 labels 
clf = log()
# Count vectorizer used by the logistic regression classifier 
vec = cv() 
# Fit count vectorizer with training text data from training set 1
vec.fit(trainText1) 
# Transforms text into vectors for training set1
train1Text1 = vec.transform(trainText1) 
# Fitting training set1 to the linear logistic regression classifier 
clf.fit(trainText1,trainLabel1)
# Saving logistic regression model from training set 1
modelFileSave = open('modelFromTrainingSet1', 'wb')
pickle.dump(clf, modelFileSave)
modelFileSave.close()  
# Loading logistic regression model from training set 1    
modelFileLoad = open('modelFromTrainingSet1', 'rb')
clf = pickle.load(modelFileLoad)
# I'm unsure how to continue from here....

LogisticRegression在内部使用不支持增量拟合的liblinear解算器。相反,您可以使用SGDClassifier(loss='log')作为partial_fit方法,尽管在实践中也可以使用该方法。其他超参数不同。小心网格搜索它们的最佳值。阅读SGDClassifier文档了解这些超参数的含义。

CountVectorizer不支持增量拟合。您必须重用安装在#1列车上的矢量器来变换#2。这意味着,集合#2中尚未在#1中看到的任何令牌都将被完全忽略。这可能不是你所期望的。

为了减轻这种情况,您可以使用无状态的HashingVectorizer,代价是不知道这些特性的含义。有关更多详细信息,请阅读文档。

相关内容

  • 没有找到相关文章

最新更新