Medial Code Documentation
Loading...
Searching...
No Matches
score_updater.hpp
1#ifndef LIGHTGBM_BOOSTING_SCORE_UPDATER_HPP_
2#define LIGHTGBM_BOOSTING_SCORE_UPDATER_HPP_
3
4
5#include <LightGBM/utils/openmp_wrapper.h>
6#include <LightGBM/meta.h>
7#include <LightGBM/dataset.h>
8#include <LightGBM/tree.h>
9#include <LightGBM/tree_learner.h>
10
11#include <cstring>
12
13namespace LightGBM {
18public:
23 ScoreUpdater(const Dataset* data, int num_tree_per_iteration) : data_(data) {
24 num_data_ = data->num_data();
25 int64_t total_size = static_cast<int64_t>(num_data_) * num_tree_per_iteration;
26 score_.resize(total_size);
27 // default start score is zero
28 #pragma omp parallel for schedule(static)
29 for (int64_t i = 0; i < total_size; ++i) {
30 score_[i] = 0.0f;
31 }
32 has_init_score_ = false;
33 const double* init_score = data->metadata().init_score();
34 // if exists initial score, will start from it
35 if (init_score != nullptr) {
36 if ((data->metadata().num_init_score() % num_data_) != 0
37 || (data->metadata().num_init_score() / num_data_) != num_tree_per_iteration) {
38 Log::Fatal("Number of class for initial score error");
39 }
40 has_init_score_ = true;
41 #pragma omp parallel for schedule(static)
42 for (int64_t i = 0; i < total_size; ++i) {
43 score_[i] = init_score[i];
44 }
45 }
46 }
49 }
50
51 inline bool has_init_score() const { return has_init_score_; }
52
53 inline void AddScore(double val, int cur_tree_id) {
54 const size_t offset = static_cast<size_t>(num_data_) * cur_tree_id;
55 #pragma omp parallel for schedule(static)
56 for (int i = 0; i < num_data_; ++i) {
57 score_[offset + i] += val;
58 }
59 }
60
61 inline void MultiplyScore(double val, int cur_tree_id) {
62 const size_t offset = static_cast<size_t>(num_data_) * cur_tree_id;
63 #pragma omp parallel for schedule(static)
64 for (int i = 0; i < num_data_; ++i) {
65 score_[offset + i] *= val;
66 }
67 }
74 inline void AddScore(const Tree* tree, int cur_tree_id) {
75 const size_t offset = static_cast<size_t>(num_data_) * cur_tree_id;
76 tree->AddPredictionToScore(data_, num_data_, score_.data() + offset);
77 }
85 inline void AddScore(const TreeLearner* tree_learner, const Tree* tree, int cur_tree_id) {
86 const size_t offset = static_cast<size_t>(num_data_) * cur_tree_id;
87 tree_learner->AddPredictionToScore(tree, score_.data() + offset);
88 }
97 inline void AddScore(const Tree* tree, const data_size_t* data_indices,
98 data_size_t data_cnt, int cur_tree_id) {
99 const size_t offset = static_cast<size_t>(num_data_) * cur_tree_id;
100 tree->AddPredictionToScore(data_, data_indices, data_cnt, score_.data() + offset);
101 }
103 inline const double* score() const { return score_.data(); }
104
105 inline data_size_t num_data() const { return num_data_; }
106
110 ScoreUpdater(const ScoreUpdater&) = delete;
111
112private:
114 data_size_t num_data_;
116 const Dataset* data_;
118 std::vector<double> score_;
119 bool has_init_score_;
120};
121
122} // namespace LightGBM
123#endif // LightGBM_BOOSTING_SCORE_UPDATER_HPP_
The main class of data set, which are used to traning or validation.
Definition dataset.h:278
Used to store and update score for data.
Definition score_updater.hpp:17
void AddScore(const Tree *tree, const data_size_t *data_indices, data_size_t data_cnt, int cur_tree_id)
Using tree model to get prediction number, then adding to scores for parts of data Used for predictio...
Definition score_updater.hpp:97
ScoreUpdater & operator=(const ScoreUpdater &)=delete
Disable copy.
void AddScore(const Tree *tree, int cur_tree_id)
Using tree model to get prediction number, then adding to scores for all data Note: this function gen...
Definition score_updater.hpp:74
const double * score() const
Pointer of score.
Definition score_updater.hpp:103
ScoreUpdater(const ScoreUpdater &)=delete
Disable copy.
~ScoreUpdater()
Destructor.
Definition score_updater.hpp:48
void AddScore(const TreeLearner *tree_learner, const Tree *tree, int cur_tree_id)
Adding prediction score, only used for training data. The training data is partitioned into tree leav...
Definition score_updater.hpp:85
ScoreUpdater(const Dataset *data, int num_tree_per_iteration)
Constructor, will pass a const pointer of dataset.
Definition score_updater.hpp:23
Interface for tree learner.
Definition tree_learner.h:23
virtual void AddPredictionToScore(const Tree *tree, double *out_score) const =0
Using last trained tree to predict score then adding to out_score;.
Tree model.
Definition tree.h:20
void AddPredictionToScore(const Dataset *data, data_size_t num_data, double *score) const
Adding prediction value of this tree model to scores.
Definition tree.cpp:113
desc and descl2 fields must be written in reStructuredText format
Definition application.h:10
int32_t data_size_t
Type of data size, it is better to use signed type.
Definition meta.h:14