1 /*!
2 * Copyright 2018-2019 XGBoost contributors
3 */
4 #include <xgboost/objective.h>
5 #include <xgboost/generic_parameters.h>
6 #include "../../src/common/common.h"
7 #include "../helpers.h"
8
9 namespace xgboost {
10
TEST(Objective,DeclareUnifiedTest (SoftmaxMultiClassObjGPair))11 TEST(Objective, DeclareUnifiedTest(SoftmaxMultiClassObjGPair)) {
12 GenericParameter lparam = CreateEmptyGenericParam(GPUIDX);
13 std::vector<std::pair<std::string, std::string>> args {{"num_class", "3"}};
14 std::unique_ptr<ObjFunction> obj {
15 ObjFunction::Create("multi:softmax", &lparam)
16 };
17
18 obj->Configure(args);
19 CheckConfigReload(obj, "multi:softmax");
20
21 CheckObjFunction(obj,
22 {1.0f, 0.0f, 2.0f, 2.0f, 0.0f, 1.0f}, // preds
23 {1.0f, 0.0f}, // labels
24 {1.0f, 1.0f}, // weights
25 {0.24f, -0.91f, 0.66f, -0.33f, 0.09f, 0.24f}, // grad
26 {0.36f, 0.16f, 0.44f, 0.45f, 0.16f, 0.37f}); // hess
27
28 CheckObjFunction(obj,
29 {1.0f, 0.0f, 2.0f, 2.0f, 0.0f, 1.0f}, // preds
30 {1.0f, 0.0f}, // labels
31 {}, // weights
32 {0.24f, -0.91f, 0.66f, -0.33f, 0.09f, 0.24f}, // grad
33 {0.36f, 0.16f, 0.44f, 0.45f, 0.16f, 0.37f}); // hess
34
35 ASSERT_NO_THROW(obj->DefaultEvalMetric());
36 }
37
TEST(Objective,DeclareUnifiedTest (SoftmaxMultiClassBasic))38 TEST(Objective, DeclareUnifiedTest(SoftmaxMultiClassBasic)) {
39 auto lparam = CreateEmptyGenericParam(GPUIDX);
40 std::vector<std::pair<std::string, std::string>> args{
41 std::pair<std::string, std::string>("num_class", "3")};
42
43 std::unique_ptr<ObjFunction> obj { ObjFunction::Create("multi:softmax", &lparam) };
44 obj->Configure(args);
45 CheckConfigReload(obj, "multi:softmax");
46
47 HostDeviceVector<bst_float> io_preds = {2.0f, 0.0f, 1.0f,
48 1.0f, 0.0f, 2.0f};
49 std::vector<bst_float> out_preds = {0.0f, 2.0f};
50 obj->PredTransform(&io_preds);
51
52 auto& preds = io_preds.HostVector();
53
54 for (int i = 0; i < static_cast<int>(io_preds.Size()); ++i) {
55 EXPECT_NEAR(preds[i], out_preds[i], 0.01f);
56 }
57 }
58
TEST(Objective,DeclareUnifiedTest (SoftprobMultiClassBasic))59 TEST(Objective, DeclareUnifiedTest(SoftprobMultiClassBasic)) {
60 GenericParameter lparam = CreateEmptyGenericParam(GPUIDX);
61 std::vector<std::pair<std::string, std::string>> args {
62 std::pair<std::string, std::string>("num_class", "3")};
63
64 std::unique_ptr<ObjFunction> obj {
65 ObjFunction::Create("multi:softprob", &lparam)
66 };
67 obj->Configure(args);
68 CheckConfigReload(obj, "multi:softprob");
69
70 HostDeviceVector<bst_float> io_preds = {2.0f, 0.0f, 1.0f};
71 std::vector<bst_float> out_preds = {0.66524096f, 0.09003057f, 0.24472847f};
72
73 obj->PredTransform(&io_preds);
74 auto& preds = io_preds.HostVector();
75
76 for (int i = 0; i < static_cast<int>(io_preds.Size()); ++i) {
77 EXPECT_NEAR(preds[i], out_preds[i], 0.01f);
78 }
79 }
80 } // namespace xgboost
81