Förvirringsmatris i maskininlärning med EXEMPEL
⚡ Smart sammanfattning
En förvirringsmatris är en prestandamätningstabell för klassificeringsmodeller som jämför förutspådda etiketter med kända faktiska etiketter och visar exakt vilka klasser en klassificerare får rätt och vilka den felaktigt får.

Vad är Confusion Matrix?
A förvirringsmatris är en prestationsmätningsteknik för maskininlärning klassificering. Det är en tabell som visar hur en klassificeringsmodell presterade på en uppsättning testdata för vilka de verkliga värdena redan är kända. Termen förvirringsmatris är enkel nog, men terminologin som bygger på den kan vara förvirrande, så varje del förklaras nedan i ett enkelt språk.
Matrisen gäller för alla övervakad klassificerare — logistisk regression, ett beslutsträd, en Naiv Bayes modell eller ett djupt neuralt nätverk — eftersom den bara jämför två kolumner med etiketter: vad modellen förutspådde och vad som faktiskt var sant.
Fyra utfall av förvirringsmatrisen
Förvirringsmatrisen visualiserar noggrannheten hos en klassificerare genom att jämföra de faktiska och förutsagda klasserna. Den binära förväxlingsmatrisen är sammansatt av kvadrater:

Tabellen ovan kartlägger de fyra kvadrater som varje binär förvirringsmatris innehåller:
- TP: Sant positivt: Förutspådda värden korrekt förutspådda som faktiska positiva
- FP: Falskt positivt: Förutsagda värden felaktigt förutsagda som faktiskt positiva, dvs. negativa värden förutsagda som positiva
- FN: Falskt negativt resultat: Positiva värden förutspådda som negativa
- TN: Sant negativt: Förutspådda värden korrekt förutspådda som ett faktiskt negativt värde
Statistik ger de två felcellerna sina egna namn. Ett falskt positivt är en Typ I -fel — modellen utlöste ett larm som aldrig borde ha utlösts. Ett falskt negativt larm är en Typ II fel — modellen förblev tyst när den borde ha slagit larm. Att veta vilken av de två som är dyrare för ditt problem avgör vilket mätvärde du justerar senare.
Du kan beräkna noggrannhetstestet från förvirringsmatrisen, som formeln nedan visar:
Exempel på förvirringsmatris
Förvirringsmatris är en användbar maskininlärningsmetod som låter dig mäta Recall, Precision, Accuracy och AUC-ROC-kurvan. Fotbollsexemplet nedan visar vad termerna Sant Positivt, Sant Negativt, Falskt Positivt och Falskt Negativt betyder i vardagligt språk.
Sann Positiv:
Du förutspådde positivt och det visade sig vara sant. Du hade till exempel förutspått att Frankrike skulle vinna VM, och de vann.
Verkligt negativt:
Du förutspådde negativt, och det är också sant. Du hade förutspått att England inte skulle vinna, och de förlorade.
Falskt positivt:
Din förutsägelse är positiv och den är falsk.
Du hade förutspått att England skulle vinna, men de förlorade.
Falskt negativ:
Din förutsägelse är negativ, och resultatet gör den falsk.
Du hade förutspått att Frankrike inte skulle vinna, men det vann.
Du bör komma ihåg att det första ordet beskriver om förutsägelsen var rätt eller fel (Sant eller Falskt) och det andra ordet beskriver vad modellen förutspådde (Positivt eller Negativt).
Hur man beräknar en förvirringsmatris
Här är steg-för-steg-processen för att beräkna en förvirringsmatris i data mining:
- Steg 1) Först behöver du en testdatauppsättning tillsammans med dess förväntade resultatvärden.
- Steg 2) Förutsäg alla rader i testdatasetet.
- Steg 3) Jämför de förväntade resultaten med förutsägelserna och räkna:
- Summan av korrekta förutsägelser för varje klass.
- Summan av felaktiga förutsägelser för varje klass.
Efter det är dessa siffror organiserade i nedanstående metoder:
- Varje rad i matrisen motsvarar en faktisk klass.
- Varje kolumn i matrisen länkar till en förutsagd klass.
- Det totala antalet korrekta och felaktiga klassificeringar förs in i tabellen.
- Summan av korrekta förutsägelser för en klass placeras i cellen där klassens faktiska rad möter sin egen förutspådda kolumn – diagonalen.
- Summan av felaktiga förutsägelser för en klass placeras i den faktiska raden för det klassvärdet och den förutspådda kolumnen för den klass som modellen valde istället.
Rad- och kolumnroller är en konvention snarare än en lag, och vissa plottverktyg transponerar layouten, så läs alltid axeletiketterna innan du tolkar en matris. Orienteringen som används här – faktisk på raderna, förutspådd på kolumnerna – är den som scikit-learn producerar.
Andra viktiga termer som använder en förvirringsmatris
När de fyra räkningarna är på plats beskriver en familj av sekundära termer olika delar av samma tabell:
- Positivt prediktivt värde (PPV): Detta är mycket nära precision. En betydande skillnad mellan de två termerna är att PPV tar hänsyn till prevalens. I en situation där klasserna är perfekt balanserade är det positiva prediktiva värdet detsamma som precisionen.
- Nollfelfrekvens: Denna term definierar hur ofta din förutsägelse skulle vara fel om du alltid förutspådde majoritetsklassen. Du kan använda den som ett baslinjemått att jämföra din klassificerare mot.
- F-poäng: F1-poängen är ett viktat genomsnitt av den verkliga positiva frekvensen (återkallelse) och precisionen.
- ROC-kurva: ROC-kurvan visar den sanna positiva frekvensen mot den falskt positiva frekvensen vid olika gränsvärden. Den visar också en avvägning mellan sensitivitet (återkallelse) och specificitet, vilket är den sanna negativa frekvensen.
- Precision: Precisionsmåttet visar noggrannheten för den positiva klassen. Det mäter hur sannolikt förutsägelsen av den positiva klassen är korrekt.
Maximal poäng är 1 när klassificeraren perfekt klassificerar alla positiva värden. Precision ensamt är inte särskilt hjälpsamt eftersom den ignorerar den negativa klassen. Metriken paras vanligtvis ihop med återkallelsesmetriken. Återkallelse kallas också känslighet eller sann positiv hastighet, och den skrivs som visas nedan.
- Känslighet: Känslighet beräknar förhållandet mellan korrekt detekterade positiva klasser. Detta mått visar hur bra modellen är på att känna igen en positiv klass.
Förvirringsmatrismått och formler
Varje mätvärde ovan är aritmetiskt baserat på samma fyra punkter, så det är bra att se dem sida vid sida med frågan som var och en besvarar.
| metrisk | Formel | Fråga den svarar | Använd den när |
|---|---|---|---|
| Noggrannhet | (TP + TN) / (TP + TN + FP + FN) | Hur många förutsägelser var korrekta totalt sett? | Klasserna är ungefär balanserade |
| Precision | TP / (TP + FP) | När modellen säger positivt, hur ofta har den rätt? | Falskt larm är dyrt |
| Återkallelse (känslighet) | TP / (TP + FN) | Av alla verkligt positiva händelser, hur många blev ertappade? | Missade positiva resultat är dyra |
| specificitet | TN / (TN + FP) | Av alla verkliga negativa resultat, hur många rensades bort? | Den negativa klassen spelar också roll |
| F1-poäng | 2 × (Precision × Återkallelse) / (Precision + Återkallelse) | Vad är balansen mellan de två? | Du behöver ett nummer för båda |
Ta ett skräppostfilter testat på 100 e-postmeddelanden som ger TP = 45, FN = 5, FP = 10 och TN = 40. Noggrannheten är (45 + 40) / 100 = 0.85. Precisionen är 45 / (45 + 10) = 0.82, återkallelsen är 45 / (45 + 5) = 0.90 och specificiteten är 40 / (40 + 10) = 0.80. F1-poängen blir 0.86.
De siffrorna berättar en historia som en enda noggrannhetssiffra döljer: filtret fångar 90 procent av riktig skräppost men sätter felaktigt ett legitimt e-postmeddelande i karantän av fem flaggade e-postmeddelanden. Huruvida den handeln är acceptabel beror på kostnaden för varje fel, vilket är just därför matrisen rapporteras istället för enbart noggrannhet.
Förvirringsmatris för klassificering i flera klasser
Klassificeringsproblem stannar sällan vid två etiketter, och matrisen skalas utan att ändra form. För N klasser blir tabellen ett N×N rutnät: diagonalen innehåller varje korrekt förutsägelse, och varje cell utanför diagonalen registrerar exakt vilken klass som förväxlades med vilken annan klass.
En modell med tre klasser som sorterar bilder i katt, hund och kanin producerar ett 3×3-rutnät. Om cellen på raden "katt", kolumnen "hund" innehåller 12, så har tolv kattbilder blivit märkta som hund. Den detaljnivån är anledningen till att matrisen är mer användbar än en poäng: den namnger det specifika par av klasser som modellen inte kan separera.
Precision, recall och F1 definieras per klass med hjälp av en en-mot-rest-vy, där klassen i fråga är den positiva klassen och allt annat är negativt. Siffrorna per klass kombineras sedan på ett av tre sätt:
- Makrogenomsnitt: Beräknar måttet för varje klass oberoende av varandra och tar sedan det ovägda medelvärdet. Varje klass räknas lika, så att sällsynta klasser inte överröstas.
- Mikrogenomsnitt: Sammanställer TP-, FP- och FN-räkningarna över alla klasser innan metriken beräknas. Stora klasser dominerar, och för problem med en enda etikett är mikroprecision, mikroåterkallelse och noggrannhet identiska.
- Vägt genomsnitt: Medelvärdet av poängen per klass används för att använda antalet sanna instanser av varje klass som viktning, vilket synliggör klassobalansen.
Välj makro när varje klass är lika viktig, och viktat när klassfördelningen återspeglar verklig trafik.
Hur man skapar en förvirringsmatris i Python
Scikit-learn-biblioteket bygger hela tabellen från två etikettmatriser, så ingen manuell räkning krävs. Exemplet nedan jämför tio sanna etiketter mot tio förutsägelser.
from sklearn.metrics import confusion_matrix y_true = [1, 0, 1, 1, 0, 1, 0, 0, 1, 0] y_pred = [1, 0, 1, 0, 0, 1, 1, 0, 1, 0] cm = confusion_matrix(y_true, y_pred) print(cm)
Anropet returnerar en 2×2 NumPy-array där rad 0 är den faktiska negativa klassen och rad 1 är den faktiska positiva klassen:
[[4 1] [1 4]]
Om man läser arrayen mot scikit-learn-konventionen får man TN = 4 (överst till vänster), FP = 1 (överst till höger), FN = 1 (nederst till vänster) och TP = 4 (nederst till höger). Om man packar upp dessa fyra värden på en rad skapas kartanping explicit:
tn, fp, fn, tp = confusion_matrix(y_true, y_pred).ravel()
För att få precision, recall och F1 för varje klass samtidigt, inklusive makro- och viktade medelvärden som beskrivs ovan, anropa classification_report() istället för att beräkna varje mätvärde för hand:
from sklearn.metrics import classification_report print(classification_report(y_true, y_pred))
För en plottad version, ConfusionMatrixDisplay.from_predictions(y_true, y_pred) renderar samma tabell som en märkt värmekarta. Den fullständiga argumentlistan, inklusive labels och normalize alternativ, är dokumenterade i scikit-learn confusion_matrix-referensSamma utvärderingssteg gäller för modeller byggda med TensorFlow, eftersom mätvärdet endast beror på de förutspådda etiketterna.
Varför behöver du förvirringsmatris?
Här är fördelarna och fördelarna med att använda en förvirringsmatris.
- Den visar hur en klassificeringsmodell blir förvirrande när den gör förutsägelser.
- Förvirringsmatrisen ger dig insikt inte bara i de fel din klassificerare gör, utan också i de typer av fel den gör.
- Denna uppdelning hjälper dig att övervinna begränsningen med att enbart använda klassificeringsnoggrannhet.
- Varje kolumn i förvirringsmatrisen representerar instanserna av den förutsagda klassen.
- Varje rad i förvirringsmatrisen representerar instanserna av den faktiska klassen.
- Den förvandlar modellutvärdering till en diagnos som pekar på det specifika klasspar som behöver mer data eller en bättre funktion.
Det diagnostiska värdet är anledningen till att förvirringsmatrisen står i centrum för utvärderingsstadiet i alla datavetenskap arbetsflöde, och varför det vanligtvis är den första tabellen som granskas innan en klassificerare flyttas till produktion.


