Bij een beeldherkennigsprobleem, vragen we een algoritme een aantal beelden te classificeren (bij voorbeeld: bepaal voor elk beeld tot welk van volgende klassen het behoort: "vis", "kat", "hond"). De klassen worden hierbij symbolisch voorgesteld door gehele getallen 0, 1, 2, ... (dus in hetzelfde voorbeeld stelt hier 0 de klasse "vis" voor, 1 de klasse "kat" en 2 de klasse "hond"). Van elk van die beelden weten we ook wat het echt voorstelt. We beschikken dus ook over de ware klasse van elk beeld. Met deze kennis bouwen we "confusion matrix" op, die ons een inzicht moet leveren in de prestaties van het computeralgoritme.
Voor $$N$$ klassen, bestaat de confusion matrix uit $$N$$ rijen en $$N$$ kolommen. Het element op positie $$r,k$$ geeft aan hoeveel beelden aan de klasse $$k$$ toegekend werden door het algoritme, terwijl de echte klasse eigenlijk $$r$$ was. In het ideale geval (een perfect algoritme) is deze matrix een diagonaalmatrix.
Programmeer de functie confusion()
met als enig argument een NumPy-tabel met $$M$$ rijen
en 2 kolommen. De $$M$$ rijen geven aan dat er $$M$$ beelden beschouwd werden. Voor elk beeld geeft
de eerste kolom aan wat de echte klasse is. De tweede kolom geeft de mening van het computeralgoritme.
Het resultaat is een $$N \times N$$ NumPy-tabel die de bijhorende
confusion-matrix voorstelt. Alle gegevens in het argument en in het resultaat zijn geheel.
X = np.array([[1, 2], [0, 1], [0, 0], [0, 0], [1, 1], [2, 2], [1, 2], [3, 1], [3, 3], [2, 3], [2, 2], [1, 2], [0, 0]], dtype = int) print(confusion(X)) # [[3 1 0 0] # [0 1 3 0] # [0 0 2 1] # [0 1 0 1]]