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

我在使用scikit-learn,其中我保存了一个逻辑回归模型,该模型使用来自训练集1的单字作为特征。是否可以加载这个模型,然后使用来自第二个训练集(训练集2)的新数据实例来扩展它?如果可以,该如何操作?我这样做的原因是因为我对每个训练集使用了不同的方法(第一种方法涉及特征损坏/正则化,第二种方法涉及自训练)。

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

from sklearn.linear_model import LogisticRegression as logfrom sklearn.feature_extraction.text import CountVectorizer as cvimport pickletrainText1 # 训练集1的文本实例    trainLabel1 # 训练集1的标签 trainText2 # 训练集2的文本实例    trainLabel2 # 训练集2的标签 clf = log()# 逻辑回归分类器使用的计数向量化器 vec = cv() # 使用训练集1的训练文本数据拟合计数向量化器vec.fit(trainText1) # 将文本转换为训练集1的向量train1Text1 = vec.transform(trainText1) # 将训练集1拟合到线性逻辑回归分类器 clf.fit(trainText1,trainLabel1)# 保存来自训练集1的逻辑回归模型modelFileSave = open('modelFromTrainingSet1', 'wb')pickle.dump(clf, modelFileSave)modelFileSave.close()  # 加载来自训练集1的逻辑回归模型    modelFileLoad = open('modelFromTrainingSet1', 'rb')clf = pickle.load(modelFileLoad)# 我不知道如何继续...

回答:

LogisticRegression内部使用liblinear求解器,不支持增量拟合。相反,你可以使用SGDClassifier(loss='log'),它有一个partial_fit方法,可以用于这种情况,尽管在实践中,其他超参数是不同的。请小心仔细地网格搜索它们的优化值。阅读SGDClassifier的文档以了解这些超参数的含义。

CountVectorizer不支持增量拟合。你必须重用在训练集#1上拟合的向量化器来转换#2。这意味着,训练集#2中任何未在#1中见过的标记将被完全忽略。这可能不是你所期望的。

为了缓解这个问题,你可以使用HashingVectorizer,它是无状态的,代价是不知道特征的含义。阅读文档以获取更多详情。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注