在 Scikit 中保存交叉验证训练的模型
Posted
技术标签:
【中文标题】在 Scikit 中保存交叉验证训练的模型【英文标题】:Saving a cross-validation trained model in Scikit 【发布时间】:2015-12-18 11:34:33 【问题描述】:我使用Cross-Validation
和Naive Bayes
分类器在scikit-learn
中训练了一个模型。如何持久保存此模型以供以后针对新实例运行?
这就是我所拥有的,我可以获得CV
分数,但我不知道如何访问经过训练的模型
gnb = GaussianNB()
scores = cross_validation.cross_val_score(gnb, data_numpy[0],data_numpy[1], cv=10)
【问题讨论】:
【参考方案1】:cross_val_score 不会更改您的估算器,也不会返回拟合的估算器。它只是返回交叉验证估计器的分数。
要适合您的估算器 - 您应该使用提供的数据集显式调用 fit 。 要保存(序列化)它 - 您可以使用 pickle:
# To fit your estimator
gnb.fit(data_numpy[0], data_numpy[1])
# To serialize
import pickle
with open('our_estimator.pkl', 'wb') as fid:
pickle.dump(gnb, fid)
# To deserialize estimator later
with open('our_estimator.pkl', 'rb') as fid:
gnb = pickle.load(fid)
【讨论】:
我想使用交叉验证来拟合估计器,我的意思是使用交叉验证来计算参数。那我该怎么做呢? @alivar,CV 在数据集的不同子集上拟合不同的分类器,然后平均它们的分数。这就是为什么没有用 cross_validation 拟合估计器这样的概念。基本上你应该只在完整的数据集上拟合估计器。如果您想找到估算器的超参数 - 请查看 GridSearchCV GridSearchCV 很棒,但训练后我找不到 theta 和 sigma 向量。 BTE让我再次解释一下我的问题,以便您可以为我提供更好的解决方案或纠正我。我有一个带有标记实例的数据集,我可以用它来训练分类器,然后我必须在我不知道真实类类别的新实例上运行分类器。现在,我担心的是,如果我只是使用标记的数据集训练 GaussianNB,我不确定它是否给了我一个与使用 CV 时得到的准确度相同的分类器。这有意义吗? @alivar,如果您要在完整数据集上训练估计器,而不是在 K-fold cv 中训练 k-1 个部分,它将给出更好的结果(而不是更差)。在 CV 中显示出足够的分数后,在完整数据集上学习估计器是一种常见的做法。以上是关于在 Scikit 中保存交叉验证训练的模型的主要内容,如果未能解决你的问题,请参考以下文章
R 与 scikit-learn 中用于线性回归 R2 的交叉验证
在交叉验证后对所有训练数据进行 scikit-learn 训练
如何在交叉验证中获得 Keras scikit-learn 包装器的训练和验证损失?