#ifndef LIGHTGBM_OBJECTIVE_REGRESSION_OBJECTIVE_HPP_ #define LIGHTGBM_OBJECTIVE_REGRESSION_OBJECTIVE_HPP_ #include namespace LightGBM { /*! * \brief Objective funtion for regression */ class RegressionL2loss: public ObjectiveFunction { public: explicit RegressionL2loss(const ObjectiveConfig&) { } ~RegressionL2loss() { } void Init(const Metadata& metadata, data_size_t num_data) override { num_data_ = num_data; label_ = metadata.label(); weights_ = metadata.weights(); } void GetGradients(const score_t* score, score_t* gradients, score_t* hessians) const override { if (weights_ == nullptr) { #pragma omp parallel for schedule(static) for (data_size_t i = 0; i < num_data_; ++i) { gradients[i] = (score[i] - label_[i]); hessians[i] = 1.0; } } else { #pragma omp parallel for schedule(static) for (data_size_t i = 0; i < num_data_; ++i) { gradients[i] = (score[i] - label_[i]) * weights_[i]; hessians[i] = weights_[i]; } } } double GetSigmoid() const override { // not sigmoid transform, return -1 return -1.0; } private: /*! \brief Number of data */ data_size_t num_data_; /*! \brief Pointer of label */ const float* label_; /*! \brief Pointer of weights */ const float* weights_; }; } // namespace LightGBM #endif #endif // LightGBM_OBJECTIVE_REGRESSION_OBJECTIVE_HPP_