Scikit-learn: sklearn.metrics.classification_report рдЧрд▓рдд рд╣реИ?

рдХреЛ рдирд┐рд░реНрдорд┐рдд 1 рдЕрдкреНрд░реИрд▓ 2020  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: scikit-learn/scikit-learn

рдмрдЧ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВ

sklearn.metrics.classification рд╕рдЯреАрдХ рдФрд░ рдпрд╛рдж рдХреЗ рд▓рд┐рдП рдлрд╝реНрд▓рд┐рдк рдХрд┐рдП рдЧрдП рдорд╛рдиреЛрдВ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ?

рдЪрд░рдг / рдХреЛрдб рдХреЛ рдкреБрди: рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛

from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix
from sklearn.neighbors import KNeighborsClassifier
from sklearn import datasets

def calc_precision_recall(conf_matrix, class_labels):

    # for each class
    for i in range(len(class_labels)):

        # calculate true positives
        true_positives =(conf_matrix[i, i])

        # false positives
        false_positives = (conf_matrix[i, :].sum() - true_positives)

        # false negatives
        false_negatives = 0
        for j in range(len(class_labels)):
            false_negatives += conf_matrix[j, i]
        false_negatives -= true_positives

        # and finally true negatives
        true_negatives= (conf_matrix.sum() - false_positives - false_negatives - true_positives)

        # print calculated values
        print(
            "Class label", class_labels[i],
            "T_positive", true_positives,
            "F_positive", false_positives,
            "T_negative", true_negatives,
            "F_negative", false_negatives,
            "\nSensitivity/recall", true_positives / (true_positives + false_negatives),
            "Specificity", true_negatives / (true_negatives + false_positives),
            "Precision", true_positives/(true_positives+false_positives), "\n"
        )

    return

# import some data to play with
iris = datasets.load_iris()
X = iris.data[:, 0:3]  # we only take the first two features.
y = iris.target

# Random_state parameter is just a random seed that can be used to reproduce these specific results.
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.20, random_state=27)

# Instantiate a K-Nearest Neighbors Classifier:
KNN_model = KNeighborsClassifier(n_neighbors=2)

# Fit the classifiers:
KNN_model.fit(X_train, y_train)

# Predict and store the prediction:
KNN_prediction = KNN_model.predict(X_test)

# Generate the confusion matrix
conf_matrix = confusion_matrix(KNN_prediction, y_test)

# Print the classification report
print(classification_report(KNN_prediction, y_test))

# Dummy class labels for the three iris classes
class_labels = [0,1,2]

# Own function to calculate precision and recall from the confusion matrix
calc_precision_recall(conf_matrix, class_labels)

рдЕрдкреЗрдХреНрд╖рд┐рдд рдкрд░рд┐рдгрд╛рдо

рдореЗрд░рд╛ рдХрд╛рд░реНрдп рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реИ:

рдХрдХреНрд╖рд╛ рд▓реЗрдмрд▓ 0 T_positive 7 F_positive 0 T_negative 23 F_negative 0
рд╕рдВрд╡реЗрджрдирд╢реАрд▓рддрд╛ / рд░рд┐рдХреЙрд▓ 1.0 рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ 1.0 рдкрд░рд┐рд╢реБрджреНрдзрддрд╛ 1.0

рдХрдХреНрд╖рд╛ рд▓реЗрдмрд▓ 1 T_positive 11 F_positive 1 T_negative 18 F_negative 0
рд╕рдВрд╡реЗрджрдирд╢реАрд▓рддрд╛ / рд╕реНрдорд░рдг 1.0 рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ 0.9473684210526315 рдкрд░рд┐рд╢реБрджреНрдзрддрд╛ 0.9166666666666666

рдХрдХреНрд╖рд╛ рд▓реЗрдмрд▓ 2 T_positive 11 F_positive 0 T_negative 18 F_negative 1
рд╕рдВрд╡реЗрджрдирд╢реАрд▓рддрд╛ / рд╕реНрдорд░рдг реж.резрезремремремремремремремремремремремремремрем рд╡рд┐рд╢рд┐рд╖реНрдЯ рез.реж рд╢реБрджреНрдзрддрд╛ рез.реж

          precision    recall  

       0       1.00      1.00      
       1       0.92      1.00    
       2       1.00      0.92

рдореЗрд░рд╛ рдлрд╝рдВрдХреНрд╢рди рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ рдореИрдЯреНрд░рд┐рдХреНрд╕ рд╢реАрд░реНрд╖ x- рдЕрдХреНрд╖ рдкрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрд░рдЪрд┐рдд рд╣реИ рдФрд░ рдмрд╛рдИрдВ y- рдЕрдХреНрд╖ рдХреЗ рдиреАрдЪреЗ рдЕрдиреБрдорд╛рдирд┐рдд рдорд╛рди рд╣реИред рдпрд╣ рд╡рд╣реА рд╕рдВрд░рдЪрдирд╛ рд╣реИ рдЬреЛ рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреА рдЧрдИ рд╣реИ рдФрд░ рдПрдХ рднреНрд░рдо рдореИрдЯреНрд░рд┐рдХреНрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд рд╣реИред

рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдгрд╛рдо

рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдпреЗ рдкрд░рд┐рдгрд╛рдо sklearn.metrics рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдЧреАрдХреГрдд рдХрд┐рдП рдЧрдП рдкрд░рд┐рдгрд╛рдо рд╣реИрдВ

           precision    recall  f1-score   support

       0       1.00      1.00      1.00         7
       1       1.00      0.92      0.96        12
       2       0.92      1.00      0.96        11

рд╕рдВрд╕реНрдХрд░рдгреЛрдВ

рдкреНрд░рдгрд╛рд▓реА:
рдЕрдЬрдЧрд░: 3.8.1 (рдбрд┐рдлрд╝реЙрд▓реНрдЯ, 8 рдЬрдирд╡рд░реА 2020, 22:29:32) [рдЬреАрд╕реАрд╕реА 7.3.0]
рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп: / рдШрд░ / рдЗрдЪреНрдЫрд╛ / anaconda3 / envs / ElStatLearn / bin / python
рдорд╢реАрди: рд▓рд┐рдирдХреНрд╕-4.15.0-91-рдЬреЗрдиреЗрд░рд┐рдХ- x86_64-with-glibc2.10

рдЕрдЬрдЧрд░ рдирд┐рд░реНрднрд░рддрд╛:
рдкрд╛рдЗрдк: 20.0.2
рд╕реЗрдЯрдкреНрдЯреВрд▓: 38.2.5
sklearn: 0.22.1
рд╕реБрдиреНрди: 1.18.1
рдбрд░рдкреЛрдХ: рез.рек.рез
рд╕рд╛рдЗрдерди: рдХреЛрдИ рдирд╣реАрдВ
рдкрд╛рдВрдбрд╛: 1.0.1
matplotlib: 3.1.3
joblib: 0.14.1

OpenMP рдХреЗ рд╕рд╛рде рдирд┐рд░реНрдорд┐рдд: рд╕рдЪ

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ y_test рдХреЛ рдкрд╣рд▓реЗ print(classification_report(KNN_prediction, y_test)) рдореЗрдВ рдЖрдирд╛ рдЪрд╛рд╣рд┐рдПред

рддреЛ: print(classification_report(y_test, KNN_prediction)) ред

рдлрд╝рдВрдХреНрд╢рди sklearn.metrics.classification_report(y_true, y_pred, labels=None, target_names=None, sample_weight=None, digits=2, output_dict=False, zero_division='warn') рдХрд╛ рдкрд╣рд▓рд╛ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ y_true рд╣реИред рдпрд╣ рд╕рдЯреАрдХ рдФрд░ рдпрд╛рдж рдлреНрд▓рд┐рдк рд╣реЛрдЧрд╛ред

рд╡рд░реНрдЧреАрдХрд░рдг_ рджреЗрдЦреЗрдВред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдЖрдкрдХрд╛ рднреНрд░рдо рдореИрдЯреНрд░рд┐рдХреНрд╕ рдкреАрдЫреЗ рдХреА рдУрд░ рднреА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╕реНрдХреЗрд▓реЗрд░ рдХрд╛ рднреНрд░рдо рдореИрдЯреНрд░рд┐рдХреНрд╕ рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рд╕реЗ рдкреАрдЫреЗ рд╣реИред

>>> from sklearn.metrics import confusion_matrix
>>> y_true = [2, 0, 2, 2, 0, 1]
>>> y_pred = [0, 0, 2, 2, 0, 2]
>>> confusion_matrix(y_true, y_pred)
array([[2, 0, 0],
       [0, 0, 1],
       [1, 0, 2]])

рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреЙрд▓рдо 1 рдореЗрдВ рдкрдВрдХреНрддрд┐ 1 рдФрд░ 0 рдореЗрдВ 1 рдЕрд╡рд▓реЛрдХрди рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкрдВрдХреНрддрд┐рдпрд╛рдВ рдЬрдореАрдиреА рд╕рдЪреНрдЪрд╛рдИ рд╣реИрдВ рдФрд░ рдХреЙрд▓рдо рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгрд┐рдпрд╛рдВ рд╣реИрдВред рддреЛ рдЖрдк confusion_matrix рдореЗрдВ рджрд┐рдЦрд╛рдП рдЧрдП C[i, j] рдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

рд╕рднреА 3 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ y_test рдХреЛ рдкрд╣рд▓реЗ print(classification_report(KNN_prediction, y_test)) рдореЗрдВ рдЖрдирд╛ рдЪрд╛рд╣рд┐рдПред

рддреЛ: print(classification_report(y_test, KNN_prediction)) ред

рдлрд╝рдВрдХреНрд╢рди sklearn.metrics.classification_report(y_true, y_pred, labels=None, target_names=None, sample_weight=None, digits=2, output_dict=False, zero_division='warn') рдХрд╛ рдкрд╣рд▓рд╛ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ y_true рд╣реИред рдпрд╣ рд╕рдЯреАрдХ рдФрд░ рдпрд╛рдж рдлреНрд▓рд┐рдк рд╣реЛрдЧрд╛ред

рд╡рд░реНрдЧреАрдХрд░рдг_ рджреЗрдЦреЗрдВред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдЖрдкрдХрд╛ рднреНрд░рдо рдореИрдЯреНрд░рд┐рдХреНрд╕ рдкреАрдЫреЗ рдХреА рдУрд░ рднреА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╕реНрдХреЗрд▓реЗрд░ рдХрд╛ рднреНрд░рдо рдореИрдЯреНрд░рд┐рдХреНрд╕ рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рд╕реЗ рдкреАрдЫреЗ рд╣реИред

>>> from sklearn.metrics import confusion_matrix
>>> y_true = [2, 0, 2, 2, 0, 1]
>>> y_pred = [0, 0, 2, 2, 0, 2]
>>> confusion_matrix(y_true, y_pred)
array([[2, 0, 0],
       [0, 0, 1],
       [1, 0, 2]])

рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреЙрд▓рдо 1 рдореЗрдВ рдкрдВрдХреНрддрд┐ 1 рдФрд░ 0 рдореЗрдВ 1 рдЕрд╡рд▓реЛрдХрди рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкрдВрдХреНрддрд┐рдпрд╛рдВ рдЬрдореАрдиреА рд╕рдЪреНрдЪрд╛рдИ рд╣реИрдВ рдФрд░ рдХреЙрд▓рдо рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгрд┐рдпрд╛рдВ рд╣реИрдВред рддреЛ рдЖрдк confusion_matrix рдореЗрдВ рджрд┐рдЦрд╛рдП рдЧрдП C[i, j] рдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

рдЖрдкрдХреЛ рдзрдиреНрдпрд╡рд╛рдж рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж - рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рд╕рдВрджрд░реНрдн рдиреЗ рдореБрдЭреЗ рднреНрд░рдорд┐рдд рдХрд░ рджрд┐рдпрд╛ рдерд╛!

рдХреЛрдИ рдмрд╛рдд рдирд╣реАрдВ, рд╢рд╛рдпрдж рдЕрдкрдиреЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рд╕реНрдХреЗрд▓реЗрд░ рдУрд░рд┐рдПрдВрдЯреЗрд╢рди рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рдорд┐рд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

amueller picture amueller  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

celiafish picture celiafish  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

vitorcoliveira picture vitorcoliveira  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

jrbourbeau picture jrbourbeau  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

yandrieiev picture yandrieiev  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ