Commit 546056e7 authored by Guolin Ke's avatar Guolin Ke
Browse files

fix #399 .

parent 71660f1c
...@@ -113,8 +113,6 @@ public: ...@@ -113,8 +113,6 @@ public:
inline static double GetDiscount(data_size_t k) { return discount_[k]; } inline static double GetDiscount(data_size_t k) { return discount_[k]; }
private: private:
/*! \brief True if inited, avoid init multi times */
static bool is_inited_;
/*! \brief store gains for different label */ /*! \brief store gains for different label */
static std::vector<double> label_gain_; static std::vector<double> label_gain_;
/*! \brief store discount score for different position */ /*! \brief store discount score for different position */
......
...@@ -10,25 +10,19 @@ ...@@ -10,25 +10,19 @@
namespace LightGBM { namespace LightGBM {
/*! \brief Declaration for some static members */ /*! \brief Declaration for some static members */
bool DCGCalculator::is_inited_ = false;
std::vector<double> DCGCalculator::label_gain_; std::vector<double> DCGCalculator::label_gain_;
std::vector<double> DCGCalculator::discount_; std::vector<double> DCGCalculator::discount_;
const data_size_t DCGCalculator::kMaxPosition = 10000; const data_size_t DCGCalculator::kMaxPosition = 10000;
void DCGCalculator::Init(std::vector<double> input_label_gain) { void DCGCalculator::Init(std::vector<double> input_label_gain) {
// only inited one time label_gain_.resize(input_label_gain.size());
if (is_inited_) { return; }
label_gain_.clear();
for(size_t i = 0;i < input_label_gain.size();++i){ for(size_t i = 0;i < input_label_gain.size();++i){
label_gain_.push_back(static_cast<double>(input_label_gain[i])); label_gain_[i] = static_cast<double>(input_label_gain[i]);
} }
label_gain_.shrink_to_fit(); discount_.resize(kMaxPosition);
discount_.clear();
for (data_size_t i = 0; i < kMaxPosition; ++i) { for (data_size_t i = 0; i < kMaxPosition; ++i) {
discount_.emplace_back(1.0f / std::log2(2.0f + i)); discount_[i] = 1.0f / std::log2(2.0f + i);
} }
discount_.shrink_to_fit();
is_inited_ = true;
} }
double DCGCalculator::CalMaxDCGAtK(data_size_t k, const float* label, data_size_t num_data) { double DCGCalculator::CalMaxDCGAtK(data_size_t k, const float* label, data_size_t num_data) {
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment