Back

Explore Courses Blog Tutorials Interview Questions
0 votes
1 view
in Machine Learning by (19k points)

Is there a built-in way for getting accuracy scores for each class separatetly? I know in sklearn we can get overall accuracy by using metric.accuracy_score. Is there a way to get the breakdown of accuracy scores for individual classes? Something similar to metrics.classification_report.

from sklearn.metrics import classification_report

from sklearn.metrics import accuracy_score

y_true = [0, 1, 2, 2, 2]

y_pred = [0, 0, 2, 2, 1]

target_names = ['class 0', 'class 1', 'class 2']

classification_report does not give accuracy scores:

print(classification_report(y_true, y_pred, target_names=target_names, digits=4))

Out[9]:         precision    recall  f1-score   support

class 0     0.5000    1.0000    0.6667         1

class 1     0.0000    0.0000    0.0000         1

class 2     1.0000    0.6667    0.8000         3

avg/total   0.7000    0.6000    0.6133         5

Accuracy score gives only the overall accuracy:

accuracy_score(y_true, y_pred)

Out[10]: 0.59999999999999998

1 Answer

0 votes
by (33.1k points)

Simply use sklearn's confusion matrix to get the accuracy

For example:

from sklearn.metrics import confusion_matrix

import numpy as np

y_true = [0, 1, 2, 2, 2]

y_pred = [0, 0, 2, 2, 1]

target_names = ['class 0', 'class 1', 'class 2']

#Get the confusion matrix

cm = confusion_matrix(y_true, y_pred)

#array([[1, 0, 0],

#   [1, 0, 0],

#   [0, 1, 2]])

#Now the normalize the diagonal entries

cm = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis]

#array([[1.        , 0.        , 0.        ],

#      [1.        , 0.        , 0.        ],

#      [0.        , 0.33333333, 0.66666667]])

#The diagonal entries are the accuracies of each class

cm.diagonal()

#array([1.        , 0.        , 0.66666667])

Hope this answer helps you! Thus, for more details, go through the Python Scikit Learn Cheet Sheet.

Welcome to Intellipaat Community. Get your technical queries answered by top developers!

28.4k questions

29.7k answers

500 comments

94.6k users

Browse Categories

...