Classification report in python

Generate classification report and confusion matrix in Python

In this recipe you will generate classification report and confusion matrix, also you will learn what are the required libraries for classification report generation and how to perform train test split on a dataset in Python
Last Updated: 19 Jan 2023

Recipe Objective

While using a classification problem we need to use various metrics like precision, recall, f1-score, support or others to check how efficient our model is working.

For this we need to compute there scores by classification report and confusion matrix. So in this recipie we will learn how to generate classification report and confusion matrix in Python.

This data science python source code does the following:
1. Imports necessary libraries and dataset from sklearn
2. performs train test split on the dataset
3. Applies DecisionTreeClassifier model for prediction
4. Prepares classification report for the output

Get Closer To Your Dream of Becoming a Data Scientist with 70+ Solved End-to-End ML Projects

Table of Contents

Step 1 — Import the library

from sklearn import datasets from sklearn.tree import DecisionTreeClassifier from sklearn.model_selection import train_test_split from sklearn.metrics import classification_report, confusion_matrix

We have imported datasets to use the inbuilt dataframe , DecisionTreeClassifier, train_test_split, classification_report and confusion_matrix.

Читайте также:  На чем пишется php

Step 2 — Setting up the Data

Here we have used datasets to load the inbuilt wine dataset and we have created objects X and y to store the data and the target value respectively. wine = datasets.load_wine() X = wine.data y = wine.target We are creating a list of target names and We are using train_test_split is used to split the data into two parts, one is train which is used to train the model and the other is test which is used to check how our model is working on unseen data. Here we are passing 0.3 as a parameter in the train_test_split which will split the data such that 30% of data will be in test part and rest 70% will be in the train part.

class_names = wine.target_names X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.30)

Step 3 — Training the model

Here we are using DecisionTreeClassifier to predict as a classification model and training it on the train data. After that predicting the output of test data. classifier_tree = DecisionTreeClassifier() y_predict = classifier_tree.fit(X_train, y_train).predict(X_test)

Step 5 — Creating Classification Report and Confusion Matrix

Let us first have a look on the parameters of Classification Report:

  • y_true : In this parameter we have to pass the true target values of the data.
  • y_pred : It this parameter we have to pass the predicted output of model.
  • target_names : In this parameter we have to pass the names of target.

For Confusion Matrix there are two parameters test and predicted values of the data. print(classification_report(y_test, y_predict, target_names=class_names)) print(confusion_matrix(y_test, y_predict)) So the output comes as

Источник

Как интерпретировать отчет о классификации в sklearn (с примером)

При использовании моделей классификации в машинном обучении есть три общих показателя, которые мы используем для оценки качества модели:

1. Точность : процент правильных положительных прогнозов по отношению к общему количеству положительных прогнозов.

2. Отзыв : процент правильных положительных прогнозов по отношению к общему количеству фактических положительных результатов.

3. Оценка F1 : средневзвешенное гармоническое значение точности и полноты. Чем ближе к 1, тем лучше модель.

Используя эти три показателя, мы можем понять, насколько хорошо данная модель классификации способна предсказывать результаты для некоторой переменной отклика .

К счастью, при настройке модели классификации в Python мы можем использовать функциюclassification_report () из библиотеки sklearn для генерации всех трех этих показателей.

В следующем примере показано, как использовать эту функцию на практике.

Пример: как использовать отчет о классификации в sklearn

Для этого примера мы применим модель логистической регрессии, которая использует очки и помощь, чтобы предсказать, попадут ли 1000 разных баскетболистов из колледжа в НБА.

Во-первых, мы импортируем необходимые пакеты для выполнения логистической регрессии в Python:

import pandas as pd import numpy as np from sklearn. model_selection import train_test_split from sklearn. linear_model import LogisticRegression from sklearn. metrics import classification_report 

Далее мы создадим фрейм данных, содержащий информацию о 1000 баскетболистов:

#make this example reproducible np.random.seed (1) #create DataFrame df = pd.DataFrame() #view DataFrame df.head () points assists drafted 0 5 1 1 1 11 8 0 2 12 4 1 3 8 7 0 4 9 0 0 

Примечание.Значение 0 указывает на то, что игрок не был выбран на драфте, а значение 1 указывает на то, что игрок был выбран на драфте.

Далее мы разделим наши данные на обучающий набор и тестовый набор и подгоним модель логистической регрессии:

#define the predictor variables and the response variable X = df[['points', 'assists']] y = df['drafted'] #split the dataset into training (70%) and testing (30%) sets X_train,X_test,y_train,y_test = train_test_split (X,y,test_size=0.3,random_state=0) #instantiate the model logistic_regression = LogisticRegression() #fit the model using the training data logistic_regression. fit (X_train,y_train) #use model to make predictions on test data y_pred = logistic_regression. predict (X_test) 

Наконец, мы будем использовать функциюclassification_report() для печати метрик классификации для нашей модели:

#print classification report for model print(classification_report(y_test, y_pred)) precision recall f1-score support 0 0.51 0.58 0.54 160 1 0.43 0.36 0.40 140 accuracy 0.48 300 macro avg 0.47 0.47 0.47 300 weighted avg 0.47 0.48 0.47 300 

Вот как интерпретировать вывод:

Точность : Из всех игроков, которых предсказывала модель, на драфте были выбраны только 43% .

Напомним : из всех игроков, которые действительно были выбраны на драфте, модель правильно предсказала этот результат только для 36% этих игроков.

Оценка F1 : это значение рассчитывается как:

  • Оценка F1: 2 * (Точность * Отзыв) / (Точность + Отзыв)
  • Оценка F1: 2 * (0,43 * 0,36) / (0,43 + 0,36)
  • Оценка F1: 0,40 .

Поскольку это значение не очень близко к 1, это говорит нам о том, что модель плохо предсказывает, будут ли игроки выбраны на драфте.

Поддержка : эти значения просто говорят нам, сколько игроков принадлежало к каждому классу в тестовом наборе данных. Мы видим, что среди игроков в тестовом наборе данных 160 не были задрафтованы, а 140 были задрафтованы.

Примечание.Вы можете найти полную документацию по функцииclassification_report() здесь .

Дополнительные ресурсы

В следующих руководствах представлена дополнительная информация о том, как использовать модели классификации в Python:

Источник

sklearn.metrics .classification_report¶

Build a text report showing the main classification metrics.

Parameters : y_true 1d array-like, or label indicator array / sparse matrix

Ground truth (correct) target values.

y_pred 1d array-like, or label indicator array / sparse matrix

Estimated targets as returned by a classifier.

labels array-like of shape (n_labels,), default=None

Optional list of label indices to include in the report.

target_names array-like of shape (n_labels,), default=None

Optional display names matching the labels (same order).

sample_weight array-like of shape (n_samples,), default=None

digits int, default=2

Number of digits for formatting output floating point values. When output_dict is True , this will be ignored and the returned values will not be rounded.

output_dict bool, default=False

If True, return output as dict.

Sets the value to return when there is a zero division. If set to “warn”, this acts as 0, but warnings are also raised.

New in version 1.3: np.nan option was added.

Text summary of the precision, recall, F1 score for each class. Dictionary returned if output_dict is True. Dictionary has the following structure:

'label 1': 'precision':0.5, 'recall':1.0, 'f1-score':0.67, 'support':1>, 'label 2':  . >, . > 

The reported averages include macro average (averaging the unweighted mean per label), weighted average (averaging the support-weighted mean per label), and sample average (only for multilabel classification). Micro average (averaging the total true positives, false negatives and false positives) is only shown for multi-label or multi-class with a subset of classes, because it corresponds to accuracy otherwise and would be the same for all metrics. See also precision_recall_fscore_support for more details on averages.

Note that in binary classification, recall of the positive class is also known as “sensitivity”; recall of the negative class is “specificity”.

Compute precision, recall, F-measure and support for each class.

Compute confusion matrix to evaluate the accuracy of a classification.

Compute a confusion matrix for each class or sample.

>>> from sklearn.metrics import classification_report >>> y_true = [0, 1, 2, 2, 2] >>> y_pred = [0, 0, 2, 2, 1] >>> target_names = ['class 0', 'class 1', 'class 2'] >>> print(classification_report(y_true, y_pred, target_names=target_names)) precision recall f1-score support class 0 0.50 1.00 0.67 1 class 1 0.00 0.00 0.00 1 class 2 1.00 0.67 0.80 3 accuracy 0.60 5 macro avg 0.50 0.56 0.49 5 weighted avg 0.70 0.60 0.61 5 >>> y_pred = [1, 1, 0] >>> y_true = [1, 1, 1] >>> print(classification_report(y_true, y_pred, labels=[1, 2, 3])) precision recall f1-score support 1 1.00 0.67 0.80 3 2 0.00 0.00 0.00 0 3 0.00 0.00 0.00 0 micro avg 1.00 0.67 0.80 3 macro avg 0.33 0.22 0.27 3 weighted avg 1.00 0.67 0.80 3 

Источник

Оцените статью