我正在尝试使用sklearn进行10倍交叉验证来估计分类器的混淆矩阵。
要计算我使用sklearn.metrics.confusion_matrix
的混淆矩阵。我知道我可以使用sklearn.model_selection.cross_val_score
和sklearn.metrics.make_scorer
来评估cv模型,如:
from sklearn.metrics import confusion_matrix, make_scorer
from sklearn.model_selection import cross_val_score
cm = cross_val_score(clf, X, y, make_scorer(confusion_matrix))
其中clf
是我的分类器,X
,y
是要素和类向量。但是,这会引发错误,因为confusion_matrix
不返回浮点数而是返回矩阵。
我尝试过这样的事情:
import numpy as np
from sklearn.metrics import confusion_matrix
from sklearn.model_selection import StratifiedKFold
def cv_confusion_matrix(clf, X, y, folds=10):
skf = StratifiedKFold(n_splits=folds)
cv_iter = skf.split(X, y)
cms = []
for train, test in cv_iter:
clf.fit(X[train,], y[train])
cm = confusion_matrix(y[test], clf.predict(X[test]), labels=clf.classes_)
cms.append(cm)
return np.mean(np.array(cms), axis=1)
这会有效,但我错过了sklearn与cross_val_score
和n_jobs
参数的并行性。
有没有办法做到这一点并利用并行性?