Example-6 (Unbalanced data)¶
Environment check¶
Checking that the notebook is running on Google Colab or not.
import sys
try:
import google.colab
!{sys.executable} -m pip -q -q install pycm
except:
pass
Binary classification for unbalanced data¶
from pycm import ConfusionMatrix
Case1 (Both classes have a good result)¶
$$Case_1=\begin{bmatrix}26900 & 40 \\25 & 500 \end{bmatrix}$$
case1 = ConfusionMatrix(matrix={"Class1": {"Class1": 26900, "Class2": 40}, "Class2": {"Class1": 25, "Class2": 500}})
case1.print_normalized_matrix()
print('ACC:', case1.ACC)
print('MCC:', case1.MCC)
print('CEN:', case1.CEN)
print('MCEN:', case1.MCEN)
print('DP:', case1.DP)
print('Kappa:', case1.Kappa)
print('RCI:', case1.RCI)
print('SOA1:', case1.SOA1)
Case2 (The first class has a good result)¶
$$Case_2=\begin{bmatrix}26900 & 40 \\500 & 25 \end{bmatrix}$$
case2 = ConfusionMatrix(matrix={"Class1": {"Class1": 29600, "Class2": 40}, "Class2": {"Class1": 500, "Class2": 25}})
case2.print_normalized_matrix()
print('ACC:', case2.ACC)
print('MCC:', case2.MCC)
print('CEN:', case2.CEN)
print('MCEN:', case2.MCEN)
print('DP:', case2.DP)
print('Kappa:', case2.Kappa)
print('RCI:', case2.RCI)
print('SOA1:', case2.SOA1)
Case3 (Second class has a good result )¶
$$Case_3=\begin{bmatrix}40 & 26900 \\25 & 500 \end{bmatrix}$$
case3 = ConfusionMatrix(matrix={"Class1": {"Class1": 40, "Class2": 26900}, "Class2": {"Class1": 25, "Class2": 500}})
case3.print_normalized_matrix()
print('ACC:', case3.ACC)
print('MCC:', case3.MCC)
print('CEN:', case3.CEN)
print('MCEN:', case3.MCEN)
print('DP:', case3.DP)
print('Kappa:', case3.Kappa)
print('RCI:', case3.RCI)
print('SOA1:', case3.SOA1)
Multi-class classification for unbalanced data¶
Case1 (All classes have good result and are unbalanced)¶
$$Case_1=\begin{bmatrix}4 & 0 &0&1 \\0 & 4&1&0\\0&1&4&0\\0&0&1&4000 \end{bmatrix}$$
case1 = ConfusionMatrix(
matrix={
"Class1": {"Class1": 4, "Class2": 0, "Class3": 0, "Class4": 1},
"Class2": {"Class1": 0, "Class2": 4, "Class3": 1, "Class4": 0},
"Class3": {"Class1": 0, "Class2": 1, "Class3": 4, "Class4": 0},
"Class4": {"Class1": 0, "Class2": 0, "Class3": 1, "Class4": 40000}})
case1.print_normalized_matrix()
print('ACC:', case1.ACC)
print('MCC:', case1.MCC)
print('CEN:', case1.CEN)
print('MCEN:', case1.MCEN)
print('DP:', case1.DP)
print('Kappa:', case1.Kappa)
print('RCI:', case1.RCI)
print('SOA1:', case1.SOA1)
Case2 (All classes have same result and are balanced)¶
$$Case_2=\begin{bmatrix}1 & 1 &1&1 \\1 & 1&1&1\\1&1&1&1\\1&1&1&1 \end{bmatrix}$$
case2 = ConfusionMatrix(
matrix={
"Class1": {"Class1": 1, "Class2": 1, "Class3": 1, "Class4": 1},
"Class2": {"Class1": 1, "Class2": 1, "Class3": 1, "Class4": 1},
"Class3": {"Class1": 1, "Class2": 1, "Class3": 1, "Class4": 1},
"Class4": {"Class1": 1, "Class2": 1, "Class3": 1, "Class4": 1}})
case2.print_normalized_matrix()
print('ACC:', case2.ACC)
print('MCC:', case2.MCC)
print('CEN:', case2.CEN)
print('MCEN:', case2.MCEN)
print('DP:', case2.DP)
print('Kappa:', case2.Kappa)
print('RCI:', case2.RCI)
print('SOA1:', case2.SOA1)
Case3 (A class has a bad result and is a bit unbalanced)¶
$$Case_3=\begin{bmatrix}1 & 1 &1&1 \\1 & 1&1&1\\1&1&1&1\\10&1&1&1 \end{bmatrix}$$
case3 = ConfusionMatrix(
matrix={
"Class1": {"Class1": 1, "Class2": 1, "Class3": 1, "Class4": 1},
"Class2": {"Class1": 1, "Class2": 1, "Class3": 1, "Class4": 1},
"Class3": {"Class1": 1, "Class2": 1, "Class3": 1, "Class4": 1},
"Class4": {"Class1": 10, "Class2": 1, "Class3": 1, "Class4": 1}})
case3.print_normalized_matrix()
print('ACC:', case3.ACC)
print('MCC:', case3.MCC)
print('CEN:', case3.CEN)
print('MCEN:', case3.MCEN)
print('DP:', case3.DP)
print('Kappa:', case3.Kappa)
print('RCI:', case3.RCI)
print('SOA1:', case3.SOA1)
Case4 (A class is very unbalaned and get bad result)¶
$$Case_4=\begin{bmatrix}1 & 1 &1&1 \\1 & 1&1&1\\1&1&1&1\\10000&1&1&1 \end{bmatrix}$$
case4 = ConfusionMatrix(
matrix={
"Class1": {"Class1": 1, "Class2": 1, "Class3": 1, "Class4": 1},
"Class2": {"Class1": 1, "Class2": 1, "Class3": 1, "Class4": 1},
"Class3": {"Class1": 1, "Class2": 1, "Class3": 1, "Class4": 1},
"Class4": {"Class1": 10000, "Class2": 1, "Class3": 1, "Class4": 1}})
case3.print_normalized_matrix()
print('ACC:', case4.ACC)
print('MCC:', case4.MCC)
print('CEN:', case4.CEN)
print('MCEN:', case4.MCEN)
print('DP:', case4.DP)
print('Kappa:', case4.Kappa)
print('RCI:', case4.RCI)
print('SOA1:', case4.SOA1)
Case5 (A class is very unbalaned and get bad result)¶
$$Case_5=\begin{bmatrix}1 & 1 &1&1 \\1 & 1&1&1\\1&1&1&1\\10&10&10&10 \end{bmatrix}$$
case5 = ConfusionMatrix(
matrix={
"Class1": {"Class1": 1, "Class2": 1, "Class3": 1, "Class4": 1},
"Class2": {"Class1": 1, "Class2": 1, "Class3": 1, "Class4": 1},
"Class3": {"Class1": 1, "Class2": 1, "Class3": 1, "Class4": 1},
"Class4": {"Class1": 10, "Class2": 10, "Class3": 10, "Class4": 10}})
case5.print_normalized_matrix()
print('ACC:', case5.ACC)
print('MCC:', case5.MCC)
print('CEN:', case5.CEN)
print('MCEN:', case5.MCEN)
print('DP:', case5.DP)
print('Kappa:', case5.Kappa)
print('RCI:', case5.RCI)
print('SOA1:', case5.SOA1)
Case6 (A class is very unbalaned and get bad result)¶
$$Case_6=\begin{bmatrix}1 & 1 &1&1 \\1 & 1&1&1\\1&1&1&1\\10000&10000&10000&10000 \end{bmatrix}$$
case6 = ConfusionMatrix(
matrix={
"Class1": {"Class1": 1, "Class2": 1, "Class3": 1, "Class4": 1},
"Class2": {"Class1": 1, "Class2": 1, "Class3": 1, "Class4": 1},
"Class3": {"Class1": 1, "Class2": 1, "Class3": 1, "Class4": 1},
"Class4": {"Class1": 10000, "Class2": 10000, "Class3": 10000, "Class4": 10000}})
case6.print_normalized_matrix()
print('ACC:', case6.ACC)
print('MCC:', case6.MCC)
print('CEN:', case6.CEN)
print('MCEN:', case6.MCEN)
print('DP:', case6.DP)
print('Kappa:', case6.Kappa)
print('RCI:', case6.RCI)
print('SOA1:', case6.SOA1)