在Scikit中保存经过交叉验证的训练模型

Ali*_*Ali 10 python pickle scikit-learn cross-validation

我已经训练了一个模型scikit-learn使用Cross-ValidationNaive Bayes分类器中.如何坚持使用此模型以便以后针对新实例运行?

这就是我所拥有的,我能得到的 CV分数,但我不知道如何访问训练有素的模型

gnb = GaussianNB() 
scores = cross_validation.cross_val_score(gnb, data_numpy[0],data_numpy[1], cv=10)
Run Code Online (Sandbox Code Playgroud)

Ibr*_*iev 8

cross_val_score不会更改您的估算值,也不会返回适当的估算值.它只返回交叉验证的估算分数.

要适合您的估算工具 - 您应该使用提供的数据集明确地调用它.要保存(序列化)它 - 你可以使用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)
Run Code Online (Sandbox Code Playgroud)

  • @alivar,CV在不同的数据集子集上拟合不同的分类器,然后平均他们的分数.这就是为什么没有像cross_validation那样拟合估计量的概念.基本上你应该在完整的数据集上拟合估算器.如果你想找到估算器的超参数 - 请看[GridSearchCV](http://scikit-learn.org/stable/modules/generated/sklearn.grid_search.GridSearchCV.html#sklearn.grid_search.GridSearchCV) (4认同)
  • @alivar,如果你在完整的数据集上训练估计器,而不是在 K-fold cv 中训练 k-1 个部分,它会给出更好的结果(不会更糟)。在 CV 中显示足够的分数后,在完整数据集上学习估计器是一种常见的做法。 (2认同)