Come interpretare il rapporto di classificazione in sklearn (con esempio)
Quando utilizziamoi modelli di classificazione nell’apprendimento automatico, utilizziamo tre metriche comuni per valutare la qualità del modello:
1. Accuratezza : percentuale di previsioni positive corrette rispetto al totale delle previsioni positive.
2. Richiamo : percentuale di previsioni positive corrette rispetto al totale dei positivi effettivi.
3. Punteggio F1 : una media armonica ponderata di precisione e richiamo. Più il modello è vicino a 1, migliore è il modello.
- Punteggio F1: 2* (Precisione * Richiamo) / (Precisione + Richiamo)
Utilizzando questi tre parametri, possiamo capire quanto bene un determinato modello di classificazione sia in grado di prevedere i risultati per determinate variabili di risposta .
Fortunatamente, quando adattiamo un modello di classificazione in Python, possiamo utilizzare la funzione classification_report() della libreria sklearn per generare queste tre metriche.
L’esempio seguente mostra come utilizzare questa funzione nella pratica.
Esempio: come utilizzare il rapporto di classificazione in sklearn
Per questo esempio, adatteremo un modello di regressione logistica che utilizza punti e assist per prevedere se 1.000 diversi giocatori di basket universitari verranno arruolati o meno nella NBA.
Per prima cosa importeremo i pacchetti necessari per eseguire la regressione logistica in 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
Successivamente, creeremo il data frame contenente le informazioni di 1000 giocatori di basket:
#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
Nota : un valore pari a 0 indica che un giocatore non è stato scelto mentre un valore pari a 1 indica che un giocatore è stato scelto.
Successivamente, divideremo i nostri dati in un set di training e in un set di test e adatteremo il modello di regressione logistica:
#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)
Infine, utilizzeremo la funzione classification_report() per stampare le metriche di classificazione del nostro modello:
#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
Ecco come interpretare il risultato:
Precisazione : tra tutti i giocatori il cui modello prevedeva che sarebbero stati draftati, solo il 43% lo è stato effettivamente.
Promemoria : tra tutti i giocatori effettivamente scelti, il modello ha previsto correttamente questo risultato solo per il 36% di essi.
Punteggio F1 : questo valore viene calcolato come segue:
- Punteggio F1: 2* (Precisione * Richiamo) / (Precisione + Richiamo)
- Punteggio F1: 2*(.43*.36)/(.43+.36)
- Voto F1: 0,40 .
Dato che questo valore non è molto vicino a 1, questo ci dice che il modello non prevede bene se i giocatori verranno scelti o meno.
Supporto : questi valori ci dicono semplicemente quanti giocatori appartenevano a ciascuna classe nel set di dati di test. Possiamo vedere che dei giocatori nel set di dati del test, 160 non erano stati scelti e 140 lo erano.
Nota : puoi trovare la documentazione completa per la funzione classification_report() qui .
Risorse addizionali
I seguenti tutorial forniscono informazioni aggiuntive sull’utilizzo dei modelli di classificazione in Python:
Come eseguire la regressione logistica in Python
Come creare una matrice di confusione in Python
Come calcolare la precisione bilanciata in Python