Як інтерпретувати класифікаційний звіт у sklearn (з прикладом)
Коли ми використовуємо моделі класифікації в машинному навчанні, ми використовуємо три загальні показники для оцінки якості моделі:
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
n.p. random . seeds (1)
#createDataFrame
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*(.43*.36)/(.43+.36)
- Оцінка F1: 0,40 .
Оскільки це значення не дуже близьке до 1, це говорить нам про те, що модель погано прогнозує, чи будуть гравці обрані чи ні.
Підтримка : ці значення просто говорять нам, скільки гравців належали до кожного класу в тестовому наборі даних. Ми бачимо, що з гравців у тестовому наборі даних 160 були недрафтованими, а 140 – такими.
Примітка . Ви можете знайти повну документацію для функції classification_report() тут .
Додаткові ресурси
Наступні посібники надають додаткову інформацію про використання моделей класифікації в Python:
Як виконати логістичну регресію в Python
Як створити матрицю плутанини в Python
Як розрахувати збалансовану точність у Python