def test_ndcg(): x = [] k = 4 assert_eq(ndcg.dcg(x, k), 0) x = [1, 1, 1] k = 5 assert_eq(ndcg.dcg(x, k), 1 * (1 + 1 / np.log2(3) + 1 / np.log2(4))) k = 1 assert_eq(ndcg.dcg(x, k), 1) x = [[1, 1, 1], [1, 2, 3]] k = 3 res = ndcg.dcg(x, k) assert_eq(res[0], 1 * (1 + 1 / np.log2(3) + 1 / np.log2(4))) assert_eq(res[1], 1 + 3 / np.log2(3) + 7 / np.log2(4)) x = [1, 2, 3] opt_x = [3, 2, 1] k = 3 assert_eq(ndcg.ndcg(x, k), ndcg.dcg(x, k) / ndcg.dcg(opt_x, k)) x = [1, 1, 1] assert_eq(ndcg.ndcg(x, k), 1) x = [] assert_eq(ndcg.ndcg(x, k), 0)
def test_param_stomping(self): testval_init = np.asarray([3, 2, 3, 0]) testval = np.asarray([3, 2, 3, 0]) x = ndcg.ndcg(testval, 4, False) self.assertEqual(testval_init.tolist(), testval.tolist()) x = ndcg.idcg(testval, False) self.assertEqual(testval_init.tolist(), testval.tolist()) x = ndcg.dcg(testval, False) self.assertEqual(testval_init.tolist(), testval.tolist()) x = ndcg.cum_gain(testval) self.assertEqual(testval_init.tolist(), testval.tolist())
def test_dcg_alternate(self): self.assertAlmostEqual(2.0616063, ndcg.dcg([1, 1, 0, 1])) self.assertAlmostEqual(579.0656625, ndcg.dcg([8, 9, 1, 0, 2]))
def test_dcg(self): self.assertAlmostEqual(2.5, ndcg.dcg([1, 1, 0, 1], False)) self.assertAlmostEqual(18.4922829, ndcg.dcg([8, 9, 1, 0, 2], False)) # from wikipedia self.assertAlmostEqual(8.0971714, ndcg.dcg([3, 2, 3, 0, 1, 2], False))
def test_dcg_zeros(self): self.assertAlmostEqual(0.0, ndcg.dcg([0, 0, 0, 0])) self.assertAlmostEqual(0.0, ndcg.dcg([0, 0, 0, 0], False))
def test_dcg_none(self): self.assertAlmostEqual(0.0, ndcg.dcg(None)) self.assertAlmostEqual(0.0, ndcg.dcg([])) self.assertAlmostEqual(0.0, ndcg.dcg(np.asarray([])))