通过交叉验证估计Sklearn混淆矩阵

时间:2017-03-08 10:40:21

标签: python scikit-learn cross-validation confusion-matrix

我正在尝试使用sklearn进行10倍交叉验证来估计分类器的混淆矩阵。

要计算我使用sklearn.metrics.confusion_matrix的混淆矩阵。我知道我可以使用sklearn.model_selection.cross_val_scoresklearn.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是我的分类器,Xy是要素和类向量。但是,这会引发错误,因为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_scoren_jobs参数的并行性。

有没有办法做到这一点并利用并行性?

0 个答案:

没有答案