При использовании моделей классификации в машинном обучении есть три общих показателя, которые мы используем для оценки качества модели:
1. Точность : процент правильных положительных прогнозов по отношению к общему количеству положительных прогнозов.
2. Отзыв : процент правильных положительных прогнозов по отношению к общему количеству фактических положительных результатов.
3. Оценка F1 : средневзвешенное гармоническое значение точности и полноты. Чем ближе к 1, тем лучше модель.
- Оценка F1: 2 * (Точность * Отзыв) / (Точность + Отзыв)
Используя эти три показателя, мы можем понять, насколько хорошо данная модель классификации способна предсказывать результаты для некоторой переменной отклика .
К счастью, при настройке модели классификации в 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({'points ': np.random.randint (30, size=1000),
'assists ': np.random.randint (12, size=1000),
'drafted ': np.random.randint (2, size=1000)})
#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:
Как выполнить логистическую регрессию в Python
Как создать матрицу путаницы в Python
Как рассчитать сбалансированную точность в Python