Может ли какой-либо модуль sklearn вернуть среднюю точность и вспомнить оценки для отрицательного класса при перекрестной проверке в k-кратном размере? - PullRequest
0 голосов
/ 10 февраля 2020

Я пытаюсь получить среднее значение точности и вспомнить ОБА положительный и отрицательный класс в 10-кратной перекрестной проверке. Моя модель является двоичным классификатором.

Я запустил приведенные ниже коды и, к сожалению, он вернул только среднюю точность и отзыв для положительного класса. Как я могу сказать алгоритму возвращать среднюю точность и отзывать оценки для отрицательного класса?

from sklearn.metrics import make_scorer, accuracy_score, precision_score, recall_score, f1_score
from sklearn.model_selection import cross_validate

scoring = {'accuracy' : make_scorer(accuracy_score), 
           'precision' : make_scorer(precision_score),
           'recall' : make_scorer(recall_score), 
           'f1_score' : make_scorer(f1_score)}

results = cross_validate(model_unbalanced_data_10_times_weight, X, Y, cv=10, scoring=scoring)

np.mean(results['test_precision'])
np.mean(results['test_recall'])

Я также попытался распечатать отчет о классификации, используя команду "classification_report(y_test, predictions)", которая привела к распечатка на скриншоте ниже. Однако я считаю, что оценки точности / отзыва из отчета о классификации основаны только на 1 прогоне, а не на среднем за 10 раз (поправьте меня, если я ошибаюсь).

enter image description here

1 Ответ

1 голос
/ 10 февраля 2020

Исходя из нашего обсуждения выше, я считаю, что вычисление прогнозов для каждого cv fold и вычисление cross_validation_report для них должно быть правильным путем к go. Результаты теперь должны учитывать количество сгибов cv:

>>> from sklearn.metrics import classification_report
>>> from sklearn.datasets import load_iris
>>> from sklearn.ensemble import RandomForestClassifier
>>> from sklearn.model_selection import cross_val_predict
>>> 
>>> iris = load_iris()
>>> 
>>> rf_clf = RandomForestClassifier()
>>> 
>>> preds = cross_val_predict(estimator=rf_clf,
...                           X=iris["data"],
...                           y=iris["target"],
...                           cv=15)
>>> 
>>> print(classification_report(iris["target"], preds))
              precision    recall  f1-score   support

           0       1.00      1.00      1.00        50
           1       0.92      0.94      0.93        50
           2       0.94      0.92      0.93        50

    accuracy                           0.95       150
   macro avg       0.95      0.95      0.95       150
weighted avg       0.95      0.95      0.95       150
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...