#!/usr/bin/env python # coding: utf-8 #

Please cite us if you use the software

# # Example-6 (Unbalanced data) # ## Environment check # Checking that the notebook is running on Google Colab or not. # In[1]: import sys try: import google.colab get_ipython().system('{sys.executable} -m pip -q -q install pycm') except: pass # ## Binary classification for unbalanced data # In[2]: from pycm import ConfusionMatrix # ### Case1 (Both classes have a good result) # $$Case_1=\begin{bmatrix}26900 & 40 \\25 & 500 \end{bmatrix}$$ # In[3]: 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}$$ # In[4]: 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}$$ # In[5]: 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}$$ # In[6]: 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}$$ # In[7]: 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}$$ # In[8]: 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}$$ # In[9]: 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}$$ # In[10]: 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}$$ # In[11]: 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) # # #