//=========================================================================== /*! * * * \brief Flexible error measure for classication tasks * * * * \author T. Glasmachers * \date 2011 * * * \par Copyright 1995-2017 Shark Development Team * *

* This file is part of Shark. * * * Shark is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published * by the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Shark is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with Shark. If not, see . * */ #ifndef SHARK_OBJECTIVEFUNCTIONS_LOSS_DISCRETELOSS_H #define SHARK_OBJECTIVEFUNCTIONS_LOSS_DISCRETELOSS_H #include #include namespace shark { /// /// \brief flexible loss for classification /// /// \par /// The DiscreteLoss class allows for the definition of /// a cost matrix applied to a finite number of classes. /// The cost of correct classification must be zero, all /// other costs must be non-negative. /// /// \par /// Note: As a special case, this loss can be used to provide /// a balanced error signal for unbalanced data sets. /// class DiscreteLoss : public AbstractLoss { public: /// Constructor /// \param cost cost matrix in the format (target, prediction). SHARK_EXPORT_SYMBOL DiscreteLoss(RealMatrix const& cost); /// \brief From INameable: return the class name. std::string name() const { return "DiscreteLoss"; } /// inherited from AbstractLoss, evaluation of the loss function SHARK_EXPORT_SYMBOL double eval(BatchLabelType const& target, BatchOutputType const& prediction) const; /// Define a new cost structure given by an explicit cost matrix. /// \param cost cost matrix in the format (target, prediction). SHARK_EXPORT_SYMBOL void defineCostMatrix(RealMatrix const& cost); /// Define a new cost structure so that the cost of misclassifying /// a pattern is anti-proportional to the frequency of its class. /// This amounts to balancing the class-wise cost in unbalanced /// data sets (i.e., where one class is far more frequent than /// another). /// /// \param labels label set to which the balanced loss should be adapted SHARK_EXPORT_SYMBOL void defineBalancedCost(UnlabeledData const& labels); protected: /// cost matrix RealMatrix m_cost; }; } #endif