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/linalg.h> // for Vector
15 #include <xgboost/model.h>
16 #include <xgboost/task.h>
17 
18 #include <cstdint> // for int32_t
19 #include <functional>
20 #include <string> // for string
21 
22 namespace xgboost {
23 
24 class RegTree;
25 struct Context;
26 
28 class ObjFunction : public Configurable {
29  protected:
30  Context const* ctx_{nullptr};
31 
32  public:
33  static constexpr float DefaultBaseScore() { return 0.5f; }
34 
35  public:
36  ~ObjFunction() override = default;
42  virtual void Configure(Args const& args) = 0;
51  virtual void GetGradient(HostDeviceVector<float> const& preds, MetaInfo const& info,
52  std::int32_t iter, linalg::Matrix<GradientPair>* out_gpair) = 0;
53 
55  [[nodiscard]] virtual const char* DefaultEvalMetric() const = 0;
59  [[nodiscard]] virtual Json DefaultMetricConfig() const { return Json{Null{}}; }
67  virtual void PredTransform(HostDeviceVector<float>*) const {}
75  virtual void EvalTransform(HostDeviceVector<float>* io_preds) { this->PredTransform(io_preds); }
86  virtual void ProbToMargin(linalg::Vector<float>* /*base_score*/) const {}
96  virtual void InitEstimation(MetaInfo const& info, linalg::Vector<float>* base_score) const;
100  [[nodiscard]] virtual struct ObjInfo Task() const = 0;
105  [[nodiscard]] virtual bst_target_t Targets(MetaInfo const& info) const {
106  if (info.labels.Shape(1) > 1) {
107  LOG(FATAL) << "multioutput is not supported by the current objective function";
108  }
109  return 1;
110  }
112  [[nodiscard]] Context const* Ctx() const { return this->ctx_; }
113 
129  virtual void UpdateTreeLeaf(HostDeviceVector<bst_node_t> const& /*position*/,
130  MetaInfo const& /*info*/, float /*learning_rate*/,
131  HostDeviceVector<float> const& /*prediction*/,
132  bst_target_t /*group_idx*/, RegTree* /*p_tree*/) const {}
139  static ObjFunction* Create(const std::string& name, Context const* ctx);
140 };
141 
146  : public dmlc::FunctionRegEntryBase<ObjFunctionReg,
147  std::function<ObjFunction* ()> > {
148 };
149 
162 #define XGBOOST_REGISTER_OBJECTIVE(UniqueId, Name) \
163  static DMLC_ATTRIBUTE_UNUSED ::xgboost::ObjFunctionReg & \
164  __make_ ## ObjFunctionReg ## _ ## UniqueId ## __ = \
165  ::dmlc::Registry< ::xgboost::ObjFunctionReg>::Get()->__REGISTER__(Name)
166 } // namespace xgboost
167 #endif // XGBOOST_OBJECTIVE_H_
Defines configuration macros and basic types for xgboost.
Definition: json.h:337
Data structure representing JSON format.
Definition: json.h:396
Meta information about dataset, always sit in memory.
Definition: data.h:67
linalg::Tensor< float, 2 > labels
label of each instance
Definition: data.h:79
The interface of objective function.
Definition: objective.h:28
virtual void UpdateTreeLeaf(HostDeviceVector< bst_node_t > const &, MetaInfo const &, float, HostDeviceVector< float > const &, bst_target_t, RegTree *) const
Update the leaf values after a tree is built. Needed for objectives with 0 hessian.
Definition: objective.h:129
virtual void EvalTransform(HostDeviceVector< float > *io_preds)
Apply inverse link (activation) function to prediction values.
Definition: objective.h:75
virtual void InitEstimation(MetaInfo const &info, linalg::Vector< float > *base_score) const
Obtain the initial estimation of prediction (intercept).
static constexpr float DefaultBaseScore()
Definition: objective.h:33
virtual void GetGradient(HostDeviceVector< float > const &preds, MetaInfo const &info, std::int32_t iter, linalg::Matrix< GradientPair > *out_gpair)=0
Get gradient over each of predictions, given existing information.
Context const * Ctx() const
Getter of the context.
Definition: objective.h:112
virtual void Configure(Args const &args)=0
Configure the objective with the specified parameters.
Context const * ctx_
Definition: objective.h:30
virtual void PredTransform(HostDeviceVector< float > *) const
Apply inverse link (activation) function to prediction values.
Definition: objective.h:67
static ObjFunction * Create(const std::string &name, Context const *ctx)
Create an objective function according to the name.
virtual Json DefaultMetricConfig() const
Return the configuration for the default metric.
Definition: objective.h:59
virtual struct ObjInfo Task() const =0
Return task of this objective.
~ObjFunction() override=default
virtual const char * DefaultEvalMetric() const =0
virtual void ProbToMargin(linalg::Vector< float > *) const
Apply the link function to the intercept.
Definition: objective.h:86
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:105
define regression tree to be the most common tree model.
Definition: tree_model.h:81
A tensor storage. To use it for other functionality like slicing one needs to obtain a view first....
Definition: linalg.h:760
auto Shape() const
Definition: linalg.h:882
The input data structure of xgboost.
A device-and-host vector abstraction layer.
Linear algebra related utilities.
Defines the abstract interface for different components in XGBoost.
Learner interface that integrates objective, gbm and evaluation together. This is the user facing XGB...
Definition: base.h:89
std::vector< std::pair< std::string, std::string > > Args
Definition: base.h:306
std::uint32_t bst_target_t
Type for indexing into output targets.
Definition: base.h:119
Definition: model.h:28
Runtime context for XGBoost. Contains information like threads and device.
Definition: context.h:142
Registry entry for objective factory functions.
Definition: objective.h:147
A struct returned by objective, which determines task at hand. The struct is not used by any algorith...
Definition: task.h:24