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
Fantastico!
Completion tasso migliorato a 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!