我在scikit learn中创建了一个管道
pipeline = Pipeline([
('bow', CountVectorizer()),
('classifier', BernoulliNB()),
])
使用交叉验证计算精度
scores = cross_val_score(pipeline, # steps to convert raw messages into models
train_set, # training data
label_train, # training labels
cv=5, # split data randomly into 10 parts: 9 for training, 1 for scoring
scoring='accuracy', # which scoring metric?
n_jobs=-1, # -1 = use all cores = faster
)
如何报告混淆矩阵而不是“准确性”?
不过,您可以定义一个记分器,它使用混淆矩阵中的特定值。见here [link]。只是引用代码:
这将对这四个记分器中的每一个执行交叉验证,并返回记分字典
cv_results
,例如,使用键test_tp
、test_tn
等,其中包含来自每个交叉验证拆分的混淆矩阵值。由此你可以重建一个平均混淆矩阵,但是Xema的
cross_val_predict
似乎更适合这个。注意,这实际上不适用于
cross_val_score
;您需要cross_validate
(在scikit learn v0.19中引入)。旁注:您可以使用这些记分器中的一个来通过网格搜索进行超参数优化。
*编辑:在[1,1]返回真负片,而不是[0,0]
您可以使用
cross_val_predict
(See the scikit-learn docs)而不是cross_val_score
。而不是:
你可以:
简短的回答是“你不能”。
您需要理解作为模型选择方法的
cross_val_score
和交叉验证之间的区别。cross_val_score
顾名思义,只对分数起作用。混淆矩阵不是分数,它是对评价过程中发生的事情的一种总结。一个主要的区别是分数应该返回可排序对象,特别是在scikit learn-Afloat中。所以,根据得分,你可以通过简单比较b的得分是否更高来判断方法b和a是否更好。你不能用混淆矩阵来做这个,顾名思义,它是一个矩阵。如果您想获得多个评估运行(如交叉验证)的混淆矩阵,则必须手动完成,这在scikit learn中并没有那么糟糕,实际上是几行代码。
相关问题 更多 >
编程相关推荐