def test_extreme_cllr(self):
     self.assertEqual(np.inf, metrics.cllr(*Xn_to_Xy([np.inf, 1], [1, 1])))
     self.assertEqual(np.inf, metrics.cllr(*Xn_to_Xy([np.inf, 0], [1, 1])))
     self.assertEqual(np.inf, metrics.cllr(*Xn_to_Xy([1, 1], [0, 1])))
     self.assertAlmostEqual(.5, metrics.cllr(*Xn_to_Xy([0, 0], [1, 1])))
     self.assertAlmostEqual(.5, metrics.cllr(*Xn_to_Xy([1, 1], [np.inf, np.inf])))
     self.assertAlmostEqual(0, metrics.cllr(*Xn_to_Xy([0, 0], [np.inf, np.inf])))
     self.assertAlmostEqual(np.inf, metrics.cllr(*Xn_to_Xy([np.inf, np.inf], [0, 0])))
     self.assertEqual(np.inf, metrics.cllr(*Xn_to_Xy([1], [1.e-317]))) # value near zero for which 1/value causes an overflow
Beispiel #2
0
 def test_lr_1(self):
     score_class0 = np.arange(0, 1, .1)
     score_class1 = np.arange(0, 1, .1)
     X, y = Xn_to_Xy(score_class0, score_class1)
     irc = IsotonicCalibrator(add_one=False)
     lr0, lr1 = Xy_to_Xn(irc.fit_transform(X, y), y)
     self.assertEqual(score_class0.shape, lr0.shape)
     self.assertEqual(score_class1.shape, lr1.shape)
     np.testing.assert_almost_equal(lr0, [1.] * lr0.shape[0])
     np.testing.assert_almost_equal(lr1, [1.] * lr1.shape[0])
Beispiel #3
0
    def run_cllrmin(self, lr0, lr1, places=7):
        lr0 = np.array(lr0)
        lr1 = np.array(lr1)
        X, y = Xn_to_Xy(lr0, lr1)
        cllr = _cllr(lr0, lr1)

        irc = IsotonicCalibrator(add_one=False)
        lrmin0, lrmin1 = Xy_to_Xn(irc.fit_transform(X / (X + 1), y), y)
        cllrmin = _cllr(lrmin0, lrmin1)

        self.assertAlmostEqual(cllr, cllrmin, places=places)
Beispiel #4
0
 def test_lr_almost_1(self):
     score_class0 = np.arange(0, 1, .1)
     score_class1 = np.arange(.05, 1.05, .1)
     X, y = Xn_to_Xy(score_class0, score_class1)
     irc = IsotonicCalibrator(add_one=False)
     lr0, lr1 = Xy_to_Xn(irc.fit_transform(X, y), y)
     self.assertEqual(score_class0.shape, lr0.shape)
     self.assertEqual(score_class1.shape, lr1.shape)
     np.testing.assert_almost_equal(
         lr0, np.concatenate([[0], [1.] * (lr0.shape[0] - 1)]))
     np.testing.assert_almost_equal(
         lr1, np.concatenate([[1.] * (lr1.shape[0] - 1), [np.inf]]))
    def test_fraction_calibrator(self):
        points_h0 = np.array([ 1, 2, 4, 8 ])
        points_h1 = np.array([ 2, 6, 8, 9 ])
        p0 = np.array([1., 1., .75, .5, .5 , .25, .25, .25, .25, 0., 0.])
        p1 = np.array([0., 0., .25, .25, .25, .25, .5, .5, .75, 1, 1])

        cal = FractionCalibrator(value_range=[0,10])
        cal.fit(*Xn_to_Xy(points_h0, points_h1))

        lr = cal.transform(np.arange(11))
        np.testing.assert_almost_equal(cal.p0, p0)
        np.testing.assert_almost_equal(cal.p1, p1)
        with np.errstate(divide='ignore'):
            np.testing.assert_almost_equal(lr, p1/p0)
 def test_log_odds_version(self):
     X, y = Xn_to_Xy(self.score_class0, self.score_class1)
     X = to_probability(X)
     desired = [
         3.59562799e-02, 1.75942116e-11, 2.59633540e-12, 1.36799721e-12,
         8.15673411e-03, 2.10030624e-02, 3.70456430e-05, 1.40710861e-18,
         1.04459592e-10, 3.14589737e+03, 2.59568527e+02, 1.08519904e+02,
         8.56459139e+01, 3.81243702e+00, 6.23873841e+01, 1.43844114e+02,
         2.64913149e+02, 1.49097168e+05
     ]
     calibrator = KDECalibrator()
     calibrator.fit(X, y)
     lrs_cal = calibrator.transform(X)
     np.testing.assert_allclose(lrs_cal, desired)
 def test_log_odds_version(self):
     X, y = Xn_to_Xy(self.score_class0, self.score_class1)
     X = to_probability(X)
     desired = [
         1.79732352e-01, 4.16251897e-04, 2.90464504e-04, 2.58097514e-04,
         8.75801433e-02, 1.36880766e-01, 1.19709662e-02, 2.54277585e-05,
         5.87902757e-04, 5.83462439e+02, 7.25669320e+01, 3.62580218e+01,
         3.03795948e+01, 3.59619089e+00, 2.41271821e+01, 4.50261471e+01,
         7.38162334e+01, 4.73670703e+03
     ]
     calibrator = LogitCalibrator()
     calibrator.fit(X, y)
     lrs_cal = calibrator.transform(X)
     np.testing.assert_allclose(lrs_cal, desired)
 def test_log_odds_version(self):
     X, y = Xn_to_Xy(self.score_class0, self.score_class1)
     X = to_probability(X)
     desired = [
         3.06533372e-02, 5.92376598e-09, 1.96126088e-09, 1.35801711e-09,
         6.71884519e-03, 1.74203890e-02, 6.47951643e-05, 6.33299969e-13,
         1.67740156e-08, 2.38575352e+03, 3.62962152e+02, 1.65709775e+02,
         1.33992382e+02, 6.90693424e+00, 1.00822553e+02, 2.13452386e+02,
         3.69664971e+02, 7.74656845e+03
     ]
     calibrator = GaussianCalibrator()
     calibrator.fit(X, y)
     lrs_cal = calibrator.transform(X)
     np.testing.assert_allclose(lrs_cal, desired)
 def test_illegal_cllr(self):
     self.assertTrue(np.isnan(metrics.cllr(*Xn_to_Xy([np.nan, 1], [1, 1]))))
     self.assertTrue(np.isnan(metrics.cllr(*Xn_to_Xy([1, 1], [1, np.nan]))))
     self.assertTrue(np.isnan(metrics.cllr(*Xn_to_Xy([np.nan, np.nan], [np.nan, np.nan]))))
 def test_calculate_cllr(self):
     self.assertAlmostEqual(1, metrics.cllr(*Xn_to_Xy([1, 1], [1, 1])))
     self.assertAlmostEqual(2, metrics.cllr(*Xn_to_Xy([3.]*2, [1/3.]*2)))
     self.assertAlmostEqual(2, metrics.cllr(*Xn_to_Xy([3.]*20, [1/3.]*20)))
     self.assertAlmostEqual(0.4150374992788437, metrics.cllr(*Xn_to_Xy([1/3.]*2, [3.]*2)))
     self.assertAlmostEqual(0.7075187496394219, metrics.cllr(*Xn_to_Xy([1/3.]*2, [1])))
     self.assertAlmostEqual(0.507177646488535, metrics.cllr(*Xn_to_Xy([1/100.]*100, [1])))
     self.assertAlmostEqual(0.5400680236656377, metrics.cllr(*Xn_to_Xy([1/100.]*100 + [100], [1])))
     self.assertAlmostEqual(0.5723134914863265, metrics.cllr(*Xn_to_Xy([1/100.]*100 + [100]*2, [1])))
     self.assertAlmostEqual(0.6952113122368764, metrics.cllr(*Xn_to_Xy([1/100.]*100 + [100]*6, [1])))
     self.assertAlmostEqual(1.0000000000000000, metrics.cllr(*Xn_to_Xy([1], [1])))
     self.assertAlmostEqual(1.0849625007211563, metrics.cllr(*Xn_to_Xy([2], [2]*2)))
     self.assertAlmostEqual(1.6699250014423126, metrics.cllr(*Xn_to_Xy([8], [8]*8)))