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.

  • 🔘 Fyra resultat: Sant positivt, sant negativt, falskt positivt och falskt negativt fyller varje cell i en binär matris.
  • ☑️ Feltyper: Ett falskt positivt resultat är ett typ I-fel, medan ett falskt negativt resultat är ett typ II-fel.
  • ✅ Härledda mätvärden: Noggrannhet, precision, återkallelse, specificitet och F1-poäng kommer alla från samma fyra punkter.
  • 🧪 Utöver noggrannhet: På obalanserade data smickrar noggrannheten en modell, medan matrisen avslöjar vilken klass den faktiskt misslyckas med.
  • 🛠️ Flerklassvy: N klasser producerar ett N×N rutnät där diagonalen innehåller varje korrekt förutsägelse.
  • ⚙️ Python rutt: scikit-learn bygger samma tabell i två rader med confusion_matrix() och classification_report().

Förvirringsmatris i maskininlärning med exempel

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:

Binär förvirringstabell som visar TP-, FP-, FN- och TN-kvadranterna
Förvirringstabell

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:

Noggrannhetsformel härledd från de fyra förvirringsmatrisresultaten

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:
    1. Summan av korrekta förutsägelser för varje klass.
    2. 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.

Precisionsformel: sanna positiva resultat dividerat med sanna positiva resultat plus falska positiva resultat

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.

Känslighetsformel: sanna positiva resultat dividerat med sanna positiva resultat plus falska negativa resultat

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.

Vanliga frågor

Om bara två procent av posterna är bedrägliga, får en modell som förutsäger "inte bedrägeri" varje gång 98 procents noggrannhet utan att upptäcka något. Matrisen exponerar den tomma cellen med sant positivt värde omedelbart, vilket är anledningen till att återkallelse är viktigare än noggrannhet på snedvridna data.

En normaliserad matris visar proportioner istället för råa antal, vanligtvis genom att dividera varje cell med dess radsumma. Den gör klasser av mycket olika storlekar jämförbara med en snabb blick, även om den döljer urvalsstorlekar – så rapportera båda versionerna när klasserna är obalanserade.

Bygg om matrisen vid flera sannolikhetsgränser och observera handeln. Att sänka tröskeln flyttar poster från den falskt negativa cellen till den sant positiva cellen, vilket ökar recall men också ökar falskt positiva. Välj det gränsvärde där den återstående felmixen kostar minst.

Nej. Matrisen räknar diskreta etikettmatchningar, så den behöver kategorier. Regressionsresultaten är kontinuerliga och bedöms med felmått som medelabsolutfel eller R-kvadrat. Att dela in ett kontinuerligt mål i band är det enda sättet att göra en matris meningsfull.

Återkallelse vinner oftast, eftersom en missad diagnos kostar mycket mer än ett onödigt uppföljningstest. Screeningverktyg är därför inställda för att hålla falska negativa resultat nära noll och acceptera extra falska positiva resultat, som ett bekräftande test filtrerar bort senare.

Automatiserade modellutvärderingsverktyg skannar nu varje cell utanför diagonalen, rangordnar de kostsammaste förvirringarna och föreslår vilka klasser som behöver mer träningsdata eller en sammanslagen etikett. De sveper också tröskelvärden automatiskt och omvandlar en manuell jämförelse av matriser till en rankad kortlista.

GitHub Copilot utarbetar importen, mätvärdesanropet och ett värmekartdiagram från en kort kommentar. Behandla utkastet som en utgångspunkt — bekräfta alltid axelordningen och argumentet för positiv etikett själv, eftersom en transponerad matris inverterar varje slutsats.

Tillräckligt stor för att den sällsyntaste klassen fortfarande fyller sin rad med ett fungerande antal — en handfull prover producerar mätvärden som svänger vilt mellan körningar. Korsvalidering, som summerar matriser över vikningar, ger en stabilare bild än en liten holdout-delning.

Sammanfatta detta inlägg med: