Я хотел бы вычислить отзыв, точность и f-measure теста перекрестной проверки для разных классификаторов. scikit-learn поставляется с 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
Он в основном суммирует значения матрицы путаницы, и как только у вас есть ложные положительные, ложные отрицательные и т.д. вы можете легко вычислить отзыв, точность и т.д. Но мне все равно не нравится это решение:)