Förväxlingsmatris
Svep för att visa menyn
Vid förutsägelse av ett binärt klassificeringsproblem finns det endast fyra möjliga utfall:
I bilden ovan är de faktiska värdena (sanna etiketter) ordnade uppifrån och ner i fallande ordning, medan de förutsagda värdena är ordnade från vänster till höger i stigande ordning. Detta är standardlayouten som används av scikit-learn vid visning av förväxlingsmatriser.
Olika bibliotek eller visualiseringar kan använda en annan ordning – till exempel att placera faktiska värden på x-axeln och predikterade värden på y-axeln. Skillnaden är dock endast layouten; värdena i matrisen förblir desamma.
Dessa utfall kallas true positive (TP), true negative (TN), false positive (FP) och false negative (FN). "true" eller "false" anger om förutsägelsen är korrekt, medan "positive" eller "negative" avser om den predikterade klassen är 1 eller 0.
Detta innebär att det finns två typer av fel vi kan göra: falska positiva och falska negativa. En falsk positiv förutsägelse kallas även för typ 1-fel, medan en falsk negativ förutsägelse kallas för typ 2-fel.
Konfusionsmatris
Det första sättet att utvärdera modellens prestanda är att organisera förutsägelserna i en konfusionsmatris enligt följande:
Du kan skapa en konfusionsmatris i Python med funktionen confusion_matrix() från sklearn:
from sklearn.metrics import confusion_matrix
conf_matrix = confusion_matrix(y_true, y_pred)
För bättre visualisering kan du använda funktionen heatmap() från seaborn:
sns.heatmap(conf_matrix)
Här är ett exempel på hur man beräknar en förväxlingsmatris för en Random Forest-prediktion på Titanic-datasetet:
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);
Vi kan även plotta procentandelar istället för antalet instanser genom att använda parametern 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);
Tack för dina kommentarer!
Fråga AI
Fråga AI
Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal