sklearn - перекрестная проверка с несколькими баллами

Я хотел бы вычислитьотзыв, точность а такжеф-мера перекрестной проверки для различных классификаторов.scikit учиться приходит сcross_val_score но, к сожалению, такой метод не возвращает несколько значений.

Я мог бы рассчитать такие меры, позвонивтри раза cross_val_score но это не эффективно. Есть ли лучшее решение?

К настоящему времени я написал эту функцию:

from sklearn import metrics

def mean_scores(X, y, clf, skf):

    cm = np.zeros(len(np.unique(y)) ** 2)
    for i, (train, test) in enumerate(skf):
        clf.fit(X[train], y[train])
        y_pred = clf.predict(X[test])
        cm += metrics.confusion_matrix(y[test], y_pred).flatten()

    return compute_measures(*cm / skf.n_folds)

def compute_measures(tp, fp, fn, tn):
     """Computes effectiveness measures given a confusion matrix."""
     specificity = tn / (tn + fp)
     sensitivity = tp / (tp + fn)
     fmeasure = 2 * (specificity * sensitivity) / (specificity + sensitivity)
     return sensitivity, specificity, fmeasure

Это в основном суммирует значения матрицы путаницы и как только выложно положительный, ложноотрицательный и т. д. Вы можете легко вычислить отзыв, точность и т. д. Но все же мне не нравится это решение :)

Ответы на вопрос(4)

Ваш ответ на вопрос