Matrice di Confusione
Quando si effettua una previsione per un problema di classificazione binaria, ci sono solo quattro possibili risultati:
Nell'immagine sopra, i valori reali (etichette vere) sono ordinati dall'alto verso il basso in ordine decrescente, mentre i valori previsti sono ordinati da sinistra a destra in ordine crescente. Questa è la disposizione predefinita utilizzata da scikit-learn quando visualizza le matrici di confusione.
Librerie o visualizzazioni diverse potrebbero utilizzare una disposizione differente - ad esempio, posizionando i valori reali sull'asse x e i valori previsti sull'asse y. Tuttavia, l'unica differenza è la disposizione; i valori nella matrice rimangono invariati.
Questi risultati sono chiamati vero positivo (TP), vero negativo (TN), falso positivo (FP) e falso negativo (FN). "vero" o "falso" indica se la previsione è corretta, mentre "positivo" o "negativo" si riferisce al fatto che la classe prevista sia 1 o 0.
Questo significa che ci sono due tipi di errori che possiamo commettere: falsi positivi e falsi negativi. Una previsione falso positivo è anche conosciuta come errore di tipo 1, mentre una previsione falso negativo è definita come errore di tipo 2.
Matrice di Confusione
Il primo modo per valutare le prestazioni del modello è organizzare le previsioni in una matrice di confusione come questa:
È possibile costruire una matrice di confusione in Python utilizzando la funzione confusion_matrix() da sklearn:
from sklearn.metrics import confusion_matrix
conf_matrix = confusion_matrix(y_true, y_pred)
Per una migliore visualizzazione, si può utilizzare la funzione heatmap() da seaborn:
sns.heatmap(conf_matrix)
Ecco un esempio di come calcolare la matrice di confusione per una previsione Random Forest sul dataset Titanic:
12345678910111213141516import pandas as pd import seaborn as sns from sklearn.metrics import confusion_matrix from sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import train_test_split # Read the data and assign the variables df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/b71ff7ac-3932-41d2-a4d8-060e24b00129/titanic.csv') X, y = df.drop('Survived', axis=1), df['Survived'] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1) # Build and train a Random Forest and predict target for a test set random_forest = RandomForestClassifier().fit(X_train, y_train) y_pred = random_forest.predict(X_test) # Build a confusion matrix conf_matrix = confusion_matrix(y_test, y_pred) sns.heatmap(conf_matrix, annot=True);
È anche possibile visualizzare le percentuali invece del numero di istanze utilizzando il parametro normalize:
conf_matrix = confusion_matrix(y_true, y_pred, normalize='all')
12345678910111213141516import pandas as pd import seaborn as sns from sklearn.metrics import confusion_matrix from sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import train_test_split # Read the data and assign the variables df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/b71ff7ac-3932-41d2-a4d8-060e24b00129/titanic.csv') X, y = df.drop('Survived', axis=1), df['Survived'] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1) # Build and train a Random Forest and predict target for a test set random_forest = RandomForestClassifier().fit(X_train, y_train) y_pred = random_forest.predict(X_test) # Build a confusion matrix conf_matrix = confusion_matrix(y_test, y_pred, normalize='all') sns.heatmap(conf_matrix, annot=True);
Grazie per i tuoi commenti!
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione
Can you explain what each value in the confusion matrix represents?
What is the difference between a false positive and a false negative?
How do I interpret the normalized confusion matrix?
Awesome!
Completion rate improved to 4.17
Matrice di Confusione
Scorri per mostrare il menu
Quando si effettua una previsione per un problema di classificazione binaria, ci sono solo quattro possibili risultati:
Nell'immagine sopra, i valori reali (etichette vere) sono ordinati dall'alto verso il basso in ordine decrescente, mentre i valori previsti sono ordinati da sinistra a destra in ordine crescente. Questa è la disposizione predefinita utilizzata da scikit-learn quando visualizza le matrici di confusione.
Librerie o visualizzazioni diverse potrebbero utilizzare una disposizione differente - ad esempio, posizionando i valori reali sull'asse x e i valori previsti sull'asse y. Tuttavia, l'unica differenza è la disposizione; i valori nella matrice rimangono invariati.
Questi risultati sono chiamati vero positivo (TP), vero negativo (TN), falso positivo (FP) e falso negativo (FN). "vero" o "falso" indica se la previsione è corretta, mentre "positivo" o "negativo" si riferisce al fatto che la classe prevista sia 1 o 0.
Questo significa che ci sono due tipi di errori che possiamo commettere: falsi positivi e falsi negativi. Una previsione falso positivo è anche conosciuta come errore di tipo 1, mentre una previsione falso negativo è definita come errore di tipo 2.
Matrice di Confusione
Il primo modo per valutare le prestazioni del modello è organizzare le previsioni in una matrice di confusione come questa:
È possibile costruire una matrice di confusione in Python utilizzando la funzione confusion_matrix() da sklearn:
from sklearn.metrics import confusion_matrix
conf_matrix = confusion_matrix(y_true, y_pred)
Per una migliore visualizzazione, si può utilizzare la funzione heatmap() da seaborn:
sns.heatmap(conf_matrix)
Ecco un esempio di come calcolare la matrice di confusione per una previsione Random Forest sul dataset Titanic:
12345678910111213141516import pandas as pd import seaborn as sns from sklearn.metrics import confusion_matrix from sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import train_test_split # Read the data and assign the variables df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/b71ff7ac-3932-41d2-a4d8-060e24b00129/titanic.csv') X, y = df.drop('Survived', axis=1), df['Survived'] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1) # Build and train a Random Forest and predict target for a test set random_forest = RandomForestClassifier().fit(X_train, y_train) y_pred = random_forest.predict(X_test) # Build a confusion matrix conf_matrix = confusion_matrix(y_test, y_pred) sns.heatmap(conf_matrix, annot=True);
È anche possibile visualizzare le percentuali invece del numero di istanze utilizzando il parametro normalize:
conf_matrix = confusion_matrix(y_true, y_pred, normalize='all')
12345678910111213141516import pandas as pd import seaborn as sns from sklearn.metrics import confusion_matrix from sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import train_test_split # Read the data and assign the variables df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/b71ff7ac-3932-41d2-a4d8-060e24b00129/titanic.csv') X, y = df.drop('Survived', axis=1), df['Survived'] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1) # Build and train a Random Forest and predict target for a test set random_forest = RandomForestClassifier().fit(X_train, y_train) y_pred = random_forest.predict(X_test) # Build a confusion matrix conf_matrix = confusion_matrix(y_test, y_pred, normalize='all') sns.heatmap(conf_matrix, annot=True);
Grazie per i tuoi commenti!