Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Matrice di Confusione | Confronto tra Modelli
Classificazione con Python

bookMatrice 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.

Note
Nota

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:

12345678910111213141516
import 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);
copy

È anche possibile visualizzare le percentuali invece del numero di istanze utilizzando il parametro normalize:

conf_matrix = confusion_matrix(y_true, y_pred, normalize='all')
12345678910111213141516
import 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);
copy
question mark

Qual è lo scopo della matrice di confusione?

Select the correct answer

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 5. Capitolo 1

Chieda ad AI

expand

Chieda ad AI

ChatGPT

Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione

Suggested prompts:

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

bookMatrice 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.

Note
Nota

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:

12345678910111213141516
import 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);
copy

È anche possibile visualizzare le percentuali invece del numero di istanze utilizzando il parametro normalize:

conf_matrix = confusion_matrix(y_true, y_pred, normalize='all')
12345678910111213141516
import 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);
copy
question mark

Qual è lo scopo della matrice di confusione?

Select the correct answer

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 5. Capitolo 1
some-alt