1 // Copyright by Contributors
2 #include <xgboost/objective.h>
3 #include <xgboost/generic_parameters.h>
4 #include "../helpers.h"
5 #include <xgboost/json.h>
6
7 namespace xgboost {
8
TEST(Objective,DeclareUnifiedTest (PairwiseRankingGPair))9 TEST(Objective, DeclareUnifiedTest(PairwiseRankingGPair)) {
10 std::vector<std::pair<std::string, std::string>> args;
11 xgboost::GenericParameter lparam = xgboost::CreateEmptyGenericParam(GPUIDX);
12
13 std::unique_ptr<xgboost::ObjFunction> obj {
14 xgboost::ObjFunction::Create("rank:pairwise", &lparam)
15 };
16 obj->Configure(args);
17 CheckConfigReload(obj, "rank:pairwise");
18
19 // Test with setting sample weight to second query group
20 CheckRankingObjFunction(obj,
21 {0, 0.1f, 0, 0.1f},
22 {0, 1, 0, 1},
23 {2.0f, 0.0f},
24 {0, 2, 4},
25 {1.9f, -1.9f, 0.0f, 0.0f},
26 {1.995f, 1.995f, 0.0f, 0.0f});
27
28 CheckRankingObjFunction(obj,
29 {0, 0.1f, 0, 0.1f},
30 {0, 1, 0, 1},
31 {1.0f, 1.0f},
32 {0, 2, 4},
33 {0.95f, -0.95f, 0.95f, -0.95f},
34 {0.9975f, 0.9975f, 0.9975f, 0.9975f});
35
36 ASSERT_NO_THROW(obj->DefaultEvalMetric());
37 }
38
TEST(Objective,DeclareUnifiedTest (NDCG_JsonIO))39 TEST(Objective, DeclareUnifiedTest(NDCG_JsonIO)) {
40 xgboost::GenericParameter tparam;
41 tparam.UpdateAllowUnknown(Args{});
42
43 std::unique_ptr<xgboost::ObjFunction> obj {
44 xgboost::ObjFunction::Create("rank:ndcg", &tparam)
45 };
46
47 obj->Configure(Args{});
48 Json j_obj {Object()};
49 obj->SaveConfig(&j_obj);
50
51 ASSERT_EQ(get<String>(j_obj["name"]), "rank:ndcg");;
52
53 auto const& j_param = j_obj["lambda_rank_param"];
54
55 ASSERT_EQ(get<String>(j_param["num_pairsample"]), "1");
56 ASSERT_EQ(get<String>(j_param["fix_list_weight"]), "0");
57 }
58
TEST(Objective,DeclareUnifiedTest (PairwiseRankingGPairSameLabels))59 TEST(Objective, DeclareUnifiedTest(PairwiseRankingGPairSameLabels)) {
60 std::vector<std::pair<std::string, std::string>> args;
61 xgboost::GenericParameter lparam = xgboost::CreateEmptyGenericParam(GPUIDX);
62
63 std::unique_ptr<ObjFunction> obj {
64 ObjFunction::Create("rank:pairwise", &lparam)
65 };
66 obj->Configure(args);
67 // No computation of gradient/hessian, as there is no diversity in labels
68 CheckRankingObjFunction(obj,
69 {0, 0.1f, 0, 0.1f},
70 {1, 1, 1, 1},
71 {2.0f, 0.0f},
72 {0, 2, 4},
73 {0.0f, 0.0f, 0.0f, 0.0f},
74 {0.0f, 0.0f, 0.0f, 0.0f});
75
76 ASSERT_NO_THROW(obj->DefaultEvalMetric());
77 }
78
TEST(Objective,DeclareUnifiedTest (NDCGRankingGPair))79 TEST(Objective, DeclareUnifiedTest(NDCGRankingGPair)) {
80 std::vector<std::pair<std::string, std::string>> args;
81 xgboost::GenericParameter lparam = xgboost::CreateEmptyGenericParam(GPUIDX);
82
83 std::unique_ptr<xgboost::ObjFunction> obj {
84 xgboost::ObjFunction::Create("rank:ndcg", &lparam)
85 };
86 obj->Configure(args);
87 CheckConfigReload(obj, "rank:ndcg");
88
89 // Test with setting sample weight to second query group
90 CheckRankingObjFunction(obj,
91 {0, 0.1f, 0, 0.1f},
92 {0, 1, 0, 1},
93 {2.0f, 0.0f},
94 {0, 2, 4},
95 {0.7f, -0.7f, 0.0f, 0.0f},
96 {0.74f, 0.74f, 0.0f, 0.0f});
97
98 CheckRankingObjFunction(obj,
99 {0, 0.1f, 0, 0.1f},
100 {0, 1, 0, 1},
101 {1.0f, 1.0f},
102 {0, 2, 4},
103 {0.35f, -0.35f, 0.35f, -0.35f},
104 {0.368f, 0.368f, 0.368f, 0.368f});
105 ASSERT_NO_THROW(obj->DefaultEvalMetric());
106 }
107
TEST(Objective,DeclareUnifiedTest (MAPRankingGPair))108 TEST(Objective, DeclareUnifiedTest(MAPRankingGPair)) {
109 std::vector<std::pair<std::string, std::string>> args;
110 xgboost::GenericParameter lparam = xgboost::CreateEmptyGenericParam(GPUIDX);
111
112 std::unique_ptr<xgboost::ObjFunction> obj {
113 xgboost::ObjFunction::Create("rank:map", &lparam)
114 };
115 obj->Configure(args);
116 CheckConfigReload(obj, "rank:map");
117
118 // Test with setting sample weight to second query group
119 CheckRankingObjFunction(obj,
120 {0, 0.1f, 0, 0.1f},
121 {0, 1, 0, 1},
122 {2.0f, 0.0f},
123 {0, 2, 4},
124 {0.95f, -0.95f, 0.0f, 0.0f},
125 {0.9975f, 0.9975f, 0.0f, 0.0f});
126
127 CheckRankingObjFunction(obj,
128 {0, 0.1f, 0, 0.1f},
129 {0, 1, 0, 1},
130 {1.0f, 1.0f},
131 {0, 2, 4},
132 {0.475f, -0.475f, 0.475f, -0.475f},
133 {0.4988f, 0.4988f, 0.4988f, 0.4988f});
134 ASSERT_NO_THROW(obj->DefaultEvalMetric());
135 }
136
137 } // namespace xgboost
138