2015-09-21 191 views
4

我使用Cross-ValidationNaive Bayes分类器训练了scikit-learn中的模型。我如何坚持这个模型以便以后运行新的实例?在Scikit中保存经过交叉验证训练的模型

这里简直就是我有什么,我可以得到CV成绩,但我不知道如何访问训练的模型

gnb = GaussianNB() 
scores = cross_validation.cross_val_score(gnb, data_numpy[0],data_numpy[1], cv=10) 

回答

5

cross_val_score不会改变你的估计,它不会返回拟合估计量。它只是返回交叉验证估计的分数。

为了适合您的估算器 - 您应该使用提供的数据集显式调用它。 要保存(序列化) - 你可以用泡菜:

# 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) 
+0

我想用交叉验证,以适应估计,我的意思是使用交叉验证来计算参数。那我该怎么做? – Ali

+2

@alivar,CV将数据集的不同子集上的不同分类符合并,然后对其分数进行平均。这就是为什么没有使用cross_validation拟合估计量这样的概念。基本上你应该只适合估算完整的数据集。 如果你想找到估计的超参数 - 看看[GridSearchCV](http://scikit-learn.org/stable/modules/generated/sklearn.grid_search.GridSearchCV.html#sklearn.grid_search.GridSearchCV) –

+0

GridSearchCV是很好,但我在训练后找不到theta和sigma载体。 BTE让我再次解释我的问题,以便您可以为我提供更好的解决方案或纠正我。我有一个带标记实例的数据集,我可以用它来训练一个分类器,然后我必须在新实例上运行分类器,但我不知道真正的类分类。现在,我担心的是,如果我仅仅使用带标签的数据集来训练GaussianNB,我不确定它是否给我一个与使用CV时相同的精度的分类器。那有意义吗? – Ali

相关问题