Hoe het classificatierapport in sklearn te interpreteren (met voorbeeld)
Wanneer we classificatiemodellen gebruiken bij machinaal leren, gebruiken we drie algemene statistieken om de kwaliteit van het model te evalueren:
1. Nauwkeurigheid : percentage correcte positieve voorspellingen vergeleken met het totale aantal positieve voorspellingen.
2. Herinnering : percentage correcte positieve voorspellingen vergeleken met het totale aantal feitelijke positieve voorspellingen.
3. F1-score : een gewogen harmonisch gemiddelde van precisie en herinnering. Hoe dichter het model bij 1 ligt, hoe beter het model.
- F1-score: 2* (precisie * terugroepen) / (precisie + terugroepen)
Met behulp van deze drie meetgegevens kunnen we begrijpen hoe goed een bepaald classificatiemodel de uitkomsten voor bepaalderesponsvariabelen kan voorspellen.
Gelukkig kunnen we bij het aanpassen van een classificatiemodel in Python de functie Classification_report() uit de sklearn- bibliotheek gebruiken om deze drie statistieken te genereren.
Het volgende voorbeeld laat zien hoe u deze functie in de praktijk kunt gebruiken.
Voorbeeld: hoe u het classificatierapport in sklearn gebruikt
Voor dit voorbeeld passen we een logistisch regressiemodel toe dat punten en assists gebruikt om te voorspellen of 1.000 verschillende universiteitsbasketbalspelers wel of niet zullen worden opgeroepen voor de NBA.
Eerst zullen we de benodigde pakketten importeren om logistieke regressie in Python uit te voeren:
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
Vervolgens maken we het dataframe met de informatie van 1000 basketbalspelers:
#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
Opmerking : een waarde van 0 geeft aan dat een speler niet is opgeroepen, terwijl een waarde van 1 aangeeft dat een speler is opgeroepen.
Vervolgens zullen we onze gegevens opsplitsen in een trainingsset en een testset en het logistische regressiemodel aanpassen:
#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)
Ten slotte zullen we de functie Classification_report() gebruiken om de classificatiestatistieken van ons model af te drukken:
#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
Zo interpreteert u het resultaat:
Verduidelijking : van alle spelers wier model voorspelde dat ze zouden worden opgeroepen, was slechts 43% dat ook daadwerkelijk.
Ter herinnering : van alle daadwerkelijk opgeroepen spelers voorspelde het model dit resultaat slechts voor 36% correct.
F1-score : deze waarde wordt als volgt berekend:
- F1-score: 2* (precisie * terugroepen) / (precisie + terugroepen)
- F1-score: 2*(.43*.36)/(.43+.36)
- F1-beoordeling: 0,40 .
Omdat deze waarde niet erg dicht bij 1 ligt, vertelt dit ons dat het model slecht voorspelt of spelers zullen worden opgeroepen of niet.
Ondersteuning : deze waarden vertellen ons eenvoudigweg hoeveel spelers tot elke klasse in de testdataset behoorden. We kunnen zien dat van de spelers in de testdataset er 160 niet waren opgesteld en 140 wel.
Opmerking : u kunt hier de volledige documentatie voor de functie Classification_report() vinden.
Aanvullende bronnen
De volgende tutorials bieden aanvullende informatie over het gebruik van classificatiemodellen in Python:
Hoe logistieke regressie uit te voeren in Python
Hoe je een verwarringsmatrix creëert in Python
Hoe gebalanceerde precisie in Python te berekenen