/*! * Copyright (c) 2022 Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See LICENSE file in the project root for * license information. */ #ifndef LIGHTGBM_METRIC_CUDA_CUDA_BINARY_METRIC_HPP_ #define LIGHTGBM_METRIC_CUDA_CUDA_BINARY_METRIC_HPP_ #ifdef USE_CUDA_EXP #include #include #include #include "cuda_regression_metric.hpp" #include "../binary_metric.hpp" namespace LightGBM { template class CUDABinaryMetricInterface: public CUDAPointwiseMetricInterface { public: explicit CUDABinaryMetricInterface(const Config& config): CUDAPointwiseMetricInterface(config) {} virtual ~CUDABinaryMetricInterface() {} std::vector Eval(const double* score, const ObjectiveFunction* objective) const override; }; class CUDABinaryLoglossMetric: public CUDABinaryMetricInterface { public: explicit CUDABinaryLoglossMetric(const Config& config); virtual ~CUDABinaryLoglossMetric() {} __device__ static double MetricOnPointCUDA(label_t label, double score) { // score should have been converted to probability if (label <= 0) { if (1.0f - score > kEpsilon) { return -log(1.0f - score); } } else { if (score > kEpsilon) { return -log(score); } } return -log(kEpsilon); } }; } // namespace LightGBM #endif // USE_CUDA_EXP #endif // LIGHTGBM_METRIC_CUDA_CUDA_BINARY_METRIC_HPP_