1#ifndef LIGHTGBM_TREELEARNER_LEAF_SPLITS_HPP_
2#define LIGHTGBM_TREELEARNER_LEAF_SPLITS_HPP_
6#include <LightGBM/meta.h>
7#include "data_partition.hpp"
19 :num_data_in_leaf_(num_data), num_data_(num_data),
20 data_indices_(
nullptr) {
24 num_data_in_leaf_ = num_data;
39 data_indices_ = data_partition->
GetIndexOnLeaf(leaf, &num_data_in_leaf_);
42 min_val_ = -std::numeric_limits<double>::max();
43 max_val_ = std::numeric_limits<double>::max();
46 void SetValueConstraint(
double min,
double max) {
58 num_data_in_leaf_ = num_data_;
60 data_indices_ =
nullptr;
61 double tmp_sum_gradients = 0.0f;
62 double tmp_sum_hessians = 0.0f;
63#pragma omp parallel for schedule(static) reduction(+:tmp_sum_gradients, tmp_sum_hessians)
64 for (
data_size_t i = 0; i < num_data_in_leaf_; ++i) {
65 tmp_sum_gradients += gradients[i];
66 tmp_sum_hessians += hessians[i];
68 sum_gradients_ = tmp_sum_gradients;
69 sum_hessians_ = tmp_sum_hessians;
70 min_val_ = -std::numeric_limits<double>::max();
71 max_val_ = std::numeric_limits<double>::max();
83 data_indices_ = data_partition->
GetIndexOnLeaf(leaf, &num_data_in_leaf_);
84 double tmp_sum_gradients = 0.0f;
85 double tmp_sum_hessians = 0.0f;
86#pragma omp parallel for schedule(static) reduction(+:tmp_sum_gradients, tmp_sum_hessians)
87 for (
data_size_t i = 0; i < num_data_in_leaf_; ++i) {
89 tmp_sum_gradients += gradients[idx];
90 tmp_sum_hessians += hessians[idx];
92 sum_gradients_ = tmp_sum_gradients;
93 sum_hessians_ = tmp_sum_hessians;
94 min_val_ = -std::numeric_limits<double>::max();
95 max_val_ = std::numeric_limits<double>::max();
108 min_val_ = -std::numeric_limits<double>::max();
109 max_val_ = std::numeric_limits<double>::max();
117 data_indices_ =
nullptr;
118 num_data_in_leaf_ = 0;
119 min_val_ = -std::numeric_limits<double>::max();
120 max_val_ = std::numeric_limits<double>::max();
136 double max_constraint()
const {
return max_val_; }
138 double min_constraint()
const {
return min_val_; }
152 double sum_gradients_;
154 double sum_hessians_;
DataPartition is used to store the the partition of data on tree.
Definition data_partition.hpp:17
const data_size_t * GetIndexOnLeaf(int leaf, data_size_t *out_len) const
Get the data indices of one leaf.
Definition data_partition.hpp:94
used to find split candidates for a leaf
Definition leaf_splits.hpp:16
const data_size_t * data_indices() const
Get indices of data of current leaf.
Definition leaf_splits.hpp:141
void Init(int leaf, const DataPartition *data_partition, const score_t *gradients, const score_t *hessians)
Init splits on current leaf of partial data.
Definition leaf_splits.hpp:81
int LeafIndex() const
Get current leaf index.
Definition leaf_splits.hpp:125
void Init(double sum_gradients, double sum_hessians)
Init splits on current leaf, only update sum_gradients and sum_hessians.
Definition leaf_splits.hpp:104
double sum_gradients() const
Get sum of gradients of current leaf.
Definition leaf_splits.hpp:131
data_size_t num_data_in_leaf() const
Get numer of data in current leaf.
Definition leaf_splits.hpp:128
void Init(int leaf, const DataPartition *data_partition, double sum_gradients, double sum_hessians)
Init split on current leaf on partial data.
Definition leaf_splits.hpp:37
void Init()
Init splits on current leaf.
Definition leaf_splits.hpp:115
void Init(const score_t *gradients, const score_t *hessians)
Init splits on current leaf, it will traverse all data to sum up the results.
Definition leaf_splits.hpp:57
double sum_hessians() const
Get sum of hessians of current leaf.
Definition leaf_splits.hpp:134
desc and descl2 fields must be written in reStructuredText format
Definition application.h:10
float score_t
Type of score, and gradients.
Definition meta.h:26
int32_t data_size_t
Type of data size, it is better to use signed type.
Definition meta.h:14