def test_f_measure(self): """PCR: f-measure calculations function as expected """ # Max and min tests pcr = PerformanceCalculatorResult(50,0,0,None) self.assertAlmostEqual(pcr._calculate_f_measure(),1.000,3) pcr = PerformanceCalculatorResult(0,50,0,None) self.assertEqual(pcr._calculate_f_measure(),None) pcr = PerformanceCalculatorResult(0,0,50,None) self.assertEqual(pcr._calculate_f_measure(),None)
def test_init_missing_TN(self): """PCR: init functions with missing or non-int TrueNeagtive """ # TN = n/a pcr = PerformanceCalculatorResult(42,1,0,'n/a') self.assertEqual(pcr.TruePositive,42) self.assertEqual(pcr.FalsePositive,1) self.assertEqual(pcr.FalseNegative,0) self.assertEqual(pcr.TrueNegative,None) self.assertAlmostEqual(pcr.Precision, 0.9767,3) self.assertAlmostEqual(pcr.Recall,1.0,3) self.assertAlmostEqual(pcr.FMeasure,0.9882,3) # TN = None pcr = PerformanceCalculatorResult(42,1,0,None) pcr = PerformanceCalculatorResult(42,1,0)
def test_calculation_divide_by_zeros(self): """PCR: P/R/F calculations correctly handle divide-by-zero errors""" # Divide by zero handled correctly pcr = PerformanceCalculatorResult(0,0,0,None) self.assertEqual(pcr._calculate_precision(),None) self.assertEqual(pcr._calculate_recall(),None) self.assertEqual(pcr._calculate_f_measure(),None)
def test_init_all_ints(self): """PCR: init functions as expected with valid & complete input """ pcr = PerformanceCalculatorResult(42,1,0,5) self.assertEqual(pcr.TruePositive,42) self.assertEqual(pcr.FalsePositive,1) self.assertEqual(pcr.FalseNegative,0) self.assertEqual(pcr.TrueNegative,5) self.assertAlmostEqual(pcr.Precision, 0.9767,3) self.assertAlmostEqual(pcr.Recall,1.0,3) self.assertAlmostEqual(pcr.FMeasure,0.9882,3)
def test_calculate_recall(self): """PCR: recall calculations function as expected """ # Max and min tests pcr = PerformanceCalculatorResult(50,0,0,None) self.assertAlmostEqual(pcr._calculate_recall(),1.000,3) pcr = PerformanceCalculatorResult(0,0,50,None) self.assertAlmostEqual(pcr._calculate_recall(),0.000,3) # Intermediate tests pcr = PerformanceCalculatorResult(42,0,1,None) self.assertAlmostEqual(pcr._calculate_recall(),0.9767,3) pcr = PerformanceCalculatorResult(1,0,42,None) self.assertAlmostEqual(pcr._calculate_recall(),0.0232,3) pcr = PerformanceCalculatorResult(42,0,42,None) self.assertAlmostEqual(pcr._calculate_recall(),0.500,3) pcr = PerformanceCalculatorResult(42,0,126,None) self.assertAlmostEqual(pcr._calculate_recall(),0.250,3) pcr = PerformanceCalculatorResult(126,0,42,None) self.assertAlmostEqual(pcr._calculate_recall(),0.750,3) # FP/TN have no effect pcr = PerformanceCalculatorResult(126,20,42,None) self.assertAlmostEqual(pcr._calculate_recall(),0.750,3) pcr = PerformanceCalculatorResult(126,20,42,50) self.assertAlmostEqual(pcr._calculate_recall(),0.750,3)
def setUp(self): """ Initialize data for tests """ self._pcr = PerformanceCalculatorResult(42,1,0,5)