Forvirringsmatrix i maskinlæring med EKSEMPEL
⚡ Smart opsummering
En forvirringsmatrix er en præstationsmålingstabel til klassifikationsmodeller, der sammenligner forudsagte betegnelser med kendte, faktiske betegnelser og dermed præcist afslører, hvilke klasser en klassifikator får rigtige, og hvilke den fejler.

Hvad er Confusion Matrix?
A forvirringsmatrix er en præstationsmålingsteknik til machine learning klassificering. Det er en tabel, der viser, hvordan en klassificeringsmodel præsterede på et sæt testdata, hvor de sande værdier allerede er kendte. Begrebet forvirringsmatrix er simpelt nok, men den terminologi, der er bygget ovenpå, kan være forvirrende, så hver del forklares nedenfor i et letforståeligt sprog.
Matricen gælder for enhver overvåget klassifikator — logistisk regression, et beslutningstræ, en Naiv Bayes model eller dybt neuralt netværk — fordi den kun sammenligner to kolonner med etiketter: hvad modellen forudsagde, og hvad der faktisk var sandt.
Fire udfald af forvirringsmatricen
Forvirringsmatricen visualiserer nøjagtigheden af en klassifikator ved at sammenligne de faktiske og forudsagte klasser. Den binære forvekslingsmatrix er sammensat af kvadrater:

Tabellen ovenfor kortlægger de fire kvadrater, som hver binær forvirringsmatrix indeholder:
- TP: Sand positiv: Forudsagte værdier korrekt forudsagt som faktiske positive
- FP: Falsk positiv: Forudsagte værdier er fejlagtigt forudsagt som faktiske positive, dvs. negative værdier er forudsagt som positive
- FN: Falsk negativ: Positive værdier forudsagt som negative
- TN: Sand negativ: Forudsagte værdier korrekt forudsagt som en faktisk negativ
Statistik giver de to fejlceller deres egne navne. En falsk positiv er en Type I fejl — modellen udløste en alarm, der aldrig burde have været udløst. En falsk negativ er en Type II fejl — modellen forblev tavs, da den burde have slået alarm. At vide, hvilken af de to der er dyrere for dit problem, afgør, hvilken metrik du justerer senere.
Du kan beregne nøjagtighedstesten ud fra forvirringsmatricen, som vist i nedenstående formel:
Eksempel på forvirringsmatrix
Forvirringsmatrix er en nyttig maskinlæringsmetode, der giver dig mulighed for at måle recall, præcision, nøjagtighed og AUC-ROC-kurven. Fodboldeksemplet nedenfor viser, hvad udtrykkene sand positiv, sand negativ, falsk positiv og falsk negativ betyder i dagligdags sprog.
Sandt positivt:
Du forudsagde positivt, og det viste sig at være sandt. For eksempel havde du forudsagt, at Frankrig ville vinde VM, og de vandt.
Sandt negativt:
Du forudsagde negativt, og det er også sandt. Du havde forudsagt, at England ikke ville vinde, og de tabte.
Falsk positiv:
Din forudsigelse er positiv, og den er falsk.
Du havde forudsagt, at England ville vinde, men de tabte.
Falsk negativ:
Din forudsigelse er negativ, og resultatet gør den falsk.
Du havde forudsagt, at Frankrig ikke ville vinde, men det vandt.
Du skal huske, at det første ord beskriver, om forudsigelsen var rigtig eller forkert (sand eller falsk), og det andet ord beskriver, hvad modellen forudsagde (positiv eller negativ).
Sådan beregnes en forvirringsmatrix
Her er den trinvise proces til beregning af en forvirringsmatrix i data mining:
- Trin 1) Først skal du bruge et testdatasæt sammen med dets forventede resultatværdier.
- Trin 2) Forudsig alle rækkerne i testdatasættet.
- Trin 3) Sammenlign de forventede resultater med forudsigelserne og tæl:
- Summen af korrekte forudsigelser for hver klasse.
- Summen af forkerte forudsigelser for hver klasse.
Derefter er disse tal organiseret i nedenstående givne metoder:
- Hver række i matricen svarer til en faktisk klasse.
- Hver kolonne i matrixen linker til en forudsagt klasse.
- Det samlede antal korrekte og forkerte klassificeringer er indtastet i tabellen.
- Summen af korrekte forudsigelser for en klasse placeres i den celle, hvor klassens faktiske række møder dens egen forudsagte kolonne – diagonalen.
- Summen af forkerte forudsigelser for en klasse placeres i den faktiske række for den pågældende klasseværdi og den forudsagte kolonne for den klasse, som modellen valgte i stedet.
Række- og kolonneroller er en konvention snarere end en lov, og nogle plotværktøjer transponerer layoutet, så læs altid aksebetegnelserne, før du fortolker en matrix. Den anvendte orientering - faktisk på rækkerne, forudsagt på kolonnerne - er den, scikit-learn producerer.
Andre vigtige vilkår ved hjælp af en forvirringsmatrix
Når de fire tællinger er på plads, beskriver en familie af sekundære termer forskellige udsnit af den samme tabel:
- Positiv prædiktiv værdi (PPV): Dette er meget tæt på præcision. En væsentlig forskel mellem de to begreber er, at PPV tager højde for prævalens. I en situation, hvor klasserne er perfekt afbalancerede, er den positive prædiktive værdi den samme som præcisionen.
- Nul fejlrate: Dette udtryk definerer, hvor ofte din forudsigelse ville være forkert, hvis du altid forudsagde majoritetsklassen. Du kan bruge det som en basismåling at sammenligne din klassifikator med.
- F-score: F1-scoren er en vægtet gennemsnitsscore af den sande positive rate (tilbagekaldelse) og præcision.
- ROC-kurve: ROC-kurven viser den sande positive rate mod den falsk positive rate ved forskellige grænseværdier. Den viser også en afvejning mellem sensitivitet (recall) og specificitet, som er den sande negative rate.
- Præcision: Præcisionsmetrikken viser nøjagtigheden af den positive klasse. Det måler, hvor sandsynligt forudsigelsen af den positive klasse er korrekt.
Den maksimale score er 1, når klassifikatoren klassificerer alle de positive værdier perfekt. Præcision alene er ikke særlig nyttig, da den ignorerer den negative klasse. Metrikken parres normalt med recall-metrikken. Recall kaldes også følsomhed eller sand positiv rate, og den er skrevet som vist nedenfor.
- Følsomhed: Følsomhed beregner forholdet mellem korrekt detekterede positive klasser. Denne metrik viser, hvor god modellen er til at genkende en positiv klasse.
Forvirringsmatrixmetrikker og formler
Hver af ovenstående metrikker er aritmetiske baseret på de samme fire tællere, så det er nyttigt at se dem side om side med det spørgsmål, som hver enkelt besvarer.
| metric | Formula | Spørgsmål det besvarer | Brug det når |
|---|---|---|---|
| Nøjagtighed | (TP + TN) / (TP + TN + FP + FN) | Hvor mange forudsigelser var korrekte i alt? | Klasserne er nogenlunde afbalancerede |
| Precision | TP / (TP + FP) | Når modellen siger positiv, hvor ofte har den så ret? | Falske alarmer er dyre |
| Genkald (følsomhed) | TP / (TP + FN) | Af alle de virkelige positive ting, hvor mange blev fanget? | Oversete positiver er dyre |
| Specificitet | TN / (TN + FP) | Af alle reelle negativer, hvor mange blev ryddet op? | Den negative klasse betyder også noget |
| F1 score | 2 × (Præcision × Genkaldelse) / (Præcision + Genkaldelse) | Hvad er balancen mellem de to? | Du skal bruge ét nummer til begge |
Tag et spamfilter testet på 100 e-mails, der producerer TP = 45, FN = 5, FP = 10 og TN = 40. Nøjagtigheden er (45 + 40) / 100 = 0.85. Præcisionen er 45 / (45 + 10) = 0.82, recall er 45 / (45 + 5) = 0.90, og specificiteten er 40 / (40 + 10) = 0.80. F1-scoren giver 0.86.
Disse tal fortæller en historie, som et enkelt nøjagtighedstal skjuler: filteret fanger 90 procent af ægte spam, men sætter fejlagtigt én ud af fem markerede legitime e-mails i karantæne. Om denne handel er acceptabel afhænger af omkostningerne ved hver fejl, hvilket netop er grunden til, at matricen rapporteres i stedet for nøjagtighed alene.
Forvirringsmatrix til klassificering af flere klasser
Klassifikationsproblemer stopper sjældent ved to betegnelser, og matricen skalerer uden at ændre form. For N klasser bliver tabellen et N×N gitter: diagonalen indeholder alle korrekte forudsigelser, og hver celle uden for diagonalen registrerer præcis, hvilken klasse der blev forvekslet med hvilken anden klasse.
En model med tre klasser, der sorterer billeder i kat, hund og kanin, producerer et 3×3-gitter. Hvis cellen i rækken "kat", kolonnen "hund" indeholder 12, så blev tolv kattebilleder mærket hund. Det detaljeringsniveau er grunden til, at matricen er mere nyttig end en score: den navngiver det specifikke par af klasser, som modellen ikke kan adskille.
Præcision, recall og F1 defineres pr. klasse ved hjælp af en én-vs-rest-visning, hvor den pågældende klasse er den positive klasse, og alt andet er negativt. Tallene pr. klasse kombineres derefter på en af tre måder:
- Makrogennemsnit: Beregner metrikken for hver klasse uafhængigt og tager derefter den uvægtede middelværdi. Hver klasse tæller lige meget, så sjældne klasser ikke overdøves.
- Mikrogennemsnit: Samler TP-, FP- og FN-tællingerne på tværs af alle klasser, før metrikken beregnes. Store klasser dominerer, og for problemer med én label er mikropræcision, mikrorecall og nøjagtighed identiske.
- Vægtet gennemsnit: Gennemsnitter scorerne pr. klasse ved hjælp af antallet af sande forekomster af hver klasse som vægt, hvilket holder klasseubalancen synlig.
Vælg makro, når alle klasser har lige stor betydning, og vægtet, når klassefordelingen afspejler den reelle trafik.
Sådan opretter du en forvirringsmatrix i Python
Scikit-learn-biblioteket bygger hele tabellen ud fra to label-arrays, så manuel optælling er ikke nødvendig. Eksemplet nedenfor sammenligner ti sande labels med ti forudsigelser.
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)
Kaldet returnerer et 2×2 NumPy-array, hvor række 0 er den faktiske negative klasse, og række 1 er den faktiske positive klasse:
[[4 1] [1 4]]
Hvis man læser arrayet i forhold til scikit-learn-konventionen, får man TN = 4 (øverst til venstre), FP = 1 (øverst til højre), FN = 1 (nederst til venstre) og TP = 4 (nederst til højre). Ved at udpakke disse fire værdier på én linje skabes kortetping eksplicit:
tn, fp, fn, tp = confusion_matrix(y_true, y_pred).ravel()
For at få præcision, genkaldelse og F1 for hver klasse på én gang, inklusive makro- og vægtede gennemsnit beskrevet ovenfor, skal du kalde classification_report() i stedet for at beregne hver metrik manuelt:
from sklearn.metrics import classification_report print(classification_report(y_true, y_pred))
For en plottet version, ConfusionMatrixDisplay.from_predictions(y_true, y_pred) gengiver den samme tabel som et mærket varmekort. Den fulde argumentliste, inklusive labels og normalize muligheder, er dokumenteret i scikit-learn confusion_matrix referenceDet samme evalueringstrin gælder for modeller bygget med TensorFlow, fordi metrikken kun afhænger af de forudsagte etiketter.
Hvorfor har du brug for forvirringsmatrix?
Her er fordelene og ulemperne ved at bruge en forvirringsmatrix.
- Det viser, hvordan en klassifikationsmodel bliver forvirret, når den laver forudsigelser.
- Forvirringsmatricen giver dig ikke kun indsigt i de fejl, din klassifikator laver, men også i de typer af fejl, den laver.
- Denne opdeling hjælper dig med at overvinde begrænsningen ved udelukkende at bruge klassificeringsnøjagtighed.
- Hver kolonne i forvirringsmatricen repræsenterer forekomsterne af den forudsagte klasse.
- Hver række i forvirringsmatricen repræsenterer forekomsterne af den faktiske klasse.
- Den forvandler modelevaluering til en diagnose, der peger på det specifikke klassepar, der har brug for flere data eller en bedre funktion.
Den diagnostiske værdi er grunden til, at forvirringsmatricen er central i evalueringsfasen i enhver datalogi arbejdsgang, og hvorfor det normalt er den første tabel, der gennemgås, før en klassifikator opgraderes til produktion.


