xgboost
objective.h
Go to the documentation of this file.
1 
7 #ifndef XGBOOST_OBJECTIVE_H_
8 #define XGBOOST_OBJECTIVE_H_
9 
10 #include <dmlc/registry.h>
11 #include <xgboost/base.h>
12 #include <xgboost/data.h>
14 #include <xgboost/model.h>
15 #include <xgboost/task.h>
16 
17 #include <cstdint> // std::int32_t
18 #include <functional>
19 #include <string>
20 #include <utility>
21 #include <vector>
22 
23 namespace xgboost {
24 
25 class RegTree;
26 struct Context;
27 
29 class ObjFunction : public Configurable {
30  protected:
31  Context const* ctx_;
32 
33  public:
34  static constexpr float DefaultBaseScore() { return 0.5f; }
35 
36  public:
38  ~ObjFunction() override = default;
43  virtual void Configure(const std::vector<std::pair<std::string, std::string> >& args) = 0;
52  virtual void GetGradient(const HostDeviceVector<bst_float>& preds, const MetaInfo& info,
53  std::int32_t iter, linalg::Matrix<GradientPair>* out_gpair) = 0;
54 
56  virtual const char* DefaultEvalMetric() const = 0;
60  virtual Json DefaultMetricConfig() const { return Json{Null{}}; }
61 
62  // the following functions are optional, most of time default implementation is good enough
68 
74  virtual void EvalTransform(HostDeviceVector<bst_float> *io_preds) {
75  this->PredTransform(io_preds);
76  }
83  [[nodiscard]] virtual bst_float ProbToMargin(bst_float base_score) const { return base_score; }
90  virtual void InitEstimation(MetaInfo const& info, linalg::Tensor<float, 1>* base_score) const;
94  [[nodiscard]] virtual struct ObjInfo Task() const = 0;
99  [[nodiscard]] virtual bst_target_t Targets(MetaInfo const& info) const {
100  if (info.labels.Shape(1) > 1) {
101  LOG(FATAL) << "multioutput is not supported by the current objective function";
102  }
103  return 1;
104  }
105 
121  virtual void UpdateTreeLeaf(HostDeviceVector<bst_node_t> const& /*position*/,
122  MetaInfo const& /*info*/, float /*learning_rate*/,
123  HostDeviceVector<float> const& /*prediction*/,
124  std::int32_t /*group_idx*/, RegTree* /*p_tree*/) const {}
125 
131  static ObjFunction* Create(const std::string& name, Context const* ctx);
132 
137  static std::string GetSyclImplementationName(const std::string& name);
138 };
139 
144  : public dmlc::FunctionRegEntryBase<ObjFunctionReg,
145  std::function<ObjFunction* ()> > {
146 };
147 
160 #define XGBOOST_REGISTER_OBJECTIVE(UniqueId, Name) \
161  static DMLC_ATTRIBUTE_UNUSED ::xgboost::ObjFunctionReg & \
162  __make_ ## ObjFunctionReg ## _ ## UniqueId ## __ = \
163  ::dmlc::Registry< ::xgboost::ObjFunctionReg>::Get()->__REGISTER__(Name)
164 } // namespace xgboost
165 #endif // XGBOOST_OBJECTIVE_H_
Defines configuration macros and basic types for xgboost.
Definition: json.h:305
Data structure representing JSON format.
Definition: json.h:368
Meta information about dataset, always sit in memory.
Definition: data.h:47
linalg::Tensor< float, 2 > labels
label of each instance
Definition: data.h:59
interface of objective function
Definition: objective.h:29
virtual void PredTransform(HostDeviceVector< bst_float > *) const
transform prediction values, this is only called when Prediction is called
Definition: objective.h:67
virtual bst_float ProbToMargin(bst_float base_score) const
transform probability value back to margin this is used to transform user-set base_score back to marg...
Definition: objective.h:83
virtual void GetGradient(const HostDeviceVector< bst_float > &preds, const MetaInfo &info, std::int32_t iter, linalg::Matrix< GradientPair > *out_gpair)=0
Get gradient over each of predictions, given existing information.
static constexpr float DefaultBaseScore()
Definition: objective.h:34
virtual void EvalTransform(HostDeviceVector< bst_float > *io_preds)
transform prediction values, this is only called when Eval is called, usually it redirect to PredTran...
Definition: objective.h:74
Context const * ctx_
Definition: objective.h:31
virtual void Configure(const std::vector< std::pair< std::string, std::string > > &args)=0
Configure the objective with the specified parameters.
static ObjFunction * Create(const std::string &name, Context const *ctx)
Create an objective function according to name.
virtual void InitEstimation(MetaInfo const &info, linalg::Tensor< float, 1 > *base_score) const
Make initialize estimation of prediction.
virtual Json DefaultMetricConfig() const
Return the configuration for the default metric.
Definition: objective.h:60
virtual struct ObjInfo Task() const =0
Return task of this objective.
~ObjFunction() override=default
virtual destructor
virtual void UpdateTreeLeaf(HostDeviceVector< bst_node_t > const &, MetaInfo const &, float, HostDeviceVector< float > const &, std::int32_t, RegTree *) const
Update the leaf values after a tree is built. Needed for objectives with 0 hessian.
Definition: objective.h:121
virtual const char * DefaultEvalMetric() const =0
static std::string GetSyclImplementationName(const std::string &name)
Return sycl specific implementation name if possible.
virtual bst_target_t Targets(MetaInfo const &info) const
Return number of targets for input matrix. Right now XGBoost supports only multi-target regression.
Definition: objective.h:99
define regression tree to be the most common tree model.
Definition: tree_model.h:158
A tensor storage. To use it for other functionality like slicing one needs to obtain a view first....
Definition: linalg.h:762
auto Shape() const
Definition: linalg.h:884
The input data structure of xgboost.
A device-and-host vector abstraction layer.
Defines the abstract interface for different components in XGBoost.
Core data structure for multi-target trees.
Definition: base.h:87
std::uint32_t bst_target_t
Type for indexing into output targets.
Definition: base.h:113
float bst_float
float type, used for storing statistics
Definition: base.h:93
Definition: model.h:31
Runtime context for XGBoost. Contains information like threads and device.
Definition: context.h:133
Registry entry for objective factory functions.
Definition: objective.h:145
A struct returned by objective, which determines task at hand. The struct is not used by any algorith...
Definition: task.h:24