2023-01-24 18:57:18 +01:00
# ifndef MLPP_COST_H
# define MLPP_COST_H
2023-01-23 21:13:26 +01:00
//
// Cost.hpp
//
// Created by Marc Melikyan on 1/16/21.
//
# include <vector>
2023-01-24 19:00:54 +01:00
namespace MLPP {
class Cost {
public :
// Regression Costs
double MSE ( std : : vector < double > y_hat , std : : vector < double > y ) ;
double MSE ( std : : vector < std : : vector < double > > y_hat , std : : vector < std : : vector < double > > y ) ;
2023-01-23 21:13:26 +01:00
2023-01-24 19:00:54 +01:00
std : : vector < double > MSEDeriv ( std : : vector < double > y_hat , std : : vector < double > y ) ;
std : : vector < std : : vector < double > > MSEDeriv ( std : : vector < std : : vector < double > > y_hat , std : : vector < std : : vector < double > > y ) ;
2023-01-23 21:13:26 +01:00
2023-01-24 19:00:54 +01:00
double RMSE ( std : : vector < double > y_hat , std : : vector < double > y ) ;
double RMSE ( std : : vector < std : : vector < double > > y_hat , std : : vector < std : : vector < double > > y ) ;
2023-01-23 21:13:26 +01:00
2023-01-24 19:00:54 +01:00
std : : vector < double > RMSEDeriv ( std : : vector < double > y_hat , std : : vector < double > y ) ;
std : : vector < std : : vector < double > > RMSEDeriv ( std : : vector < std : : vector < double > > y_hat , std : : vector < std : : vector < double > > y ) ;
2023-01-23 21:13:26 +01:00
2023-01-24 19:00:54 +01:00
double MAE ( std : : vector < double > y_hat , std : : vector < double > y ) ;
double MAE ( std : : vector < std : : vector < double > > y_hat , std : : vector < std : : vector < double > > y ) ;
2023-01-23 21:13:26 +01:00
2023-01-24 19:00:54 +01:00
std : : vector < double > MAEDeriv ( std : : vector < double > y_hat , std : : vector < double > y ) ;
std : : vector < std : : vector < double > > MAEDeriv ( std : : vector < std : : vector < double > > y_hat , std : : vector < std : : vector < double > > y ) ;
2023-01-23 21:13:26 +01:00
2023-01-24 19:00:54 +01:00
double MBE ( std : : vector < double > y_hat , std : : vector < double > y ) ;
double MBE ( std : : vector < std : : vector < double > > y_hat , std : : vector < std : : vector < double > > y ) ;
2023-01-23 21:13:26 +01:00
2023-01-24 19:00:54 +01:00
std : : vector < double > MBEDeriv ( std : : vector < double > y_hat , std : : vector < double > y ) ;
std : : vector < std : : vector < double > > MBEDeriv ( std : : vector < std : : vector < double > > y_hat , std : : vector < std : : vector < double > > y ) ;
2023-01-23 21:13:26 +01:00
2023-01-24 19:00:54 +01:00
// Classification Costs
double LogLoss ( std : : vector < double > y_hat , std : : vector < double > y ) ;
double LogLoss ( std : : vector < std : : vector < double > > y_hat , std : : vector < std : : vector < double > > y ) ;
2023-01-23 21:13:26 +01:00
2023-01-24 19:00:54 +01:00
std : : vector < double > LogLossDeriv ( std : : vector < double > y_hat , std : : vector < double > y ) ;
std : : vector < std : : vector < double > > LogLossDeriv ( std : : vector < std : : vector < double > > y_hat , std : : vector < std : : vector < double > > y ) ;
2023-01-23 21:13:26 +01:00
2023-01-24 19:00:54 +01:00
double CrossEntropy ( std : : vector < double > y_hat , std : : vector < double > y ) ;
double CrossEntropy ( std : : vector < std : : vector < double > > y_hat , std : : vector < std : : vector < double > > y ) ;
2023-01-23 21:13:26 +01:00
2023-01-24 19:00:54 +01:00
std : : vector < double > CrossEntropyDeriv ( std : : vector < double > y_hat , std : : vector < double > y ) ;
std : : vector < std : : vector < double > > CrossEntropyDeriv ( std : : vector < std : : vector < double > > y_hat , std : : vector < std : : vector < double > > y ) ;
2023-01-23 21:13:26 +01:00
2023-01-24 19:00:54 +01:00
double HuberLoss ( std : : vector < double > y_hat , std : : vector < double > y , double delta ) ;
double HuberLoss ( std : : vector < std : : vector < double > > y_hat , std : : vector < std : : vector < double > > y , double delta ) ;
2023-01-23 21:13:26 +01:00
2023-01-24 19:00:54 +01:00
std : : vector < double > HuberLossDeriv ( std : : vector < double > y_hat , std : : vector < double > y , double delta ) ;
std : : vector < std : : vector < double > > HuberLossDeriv ( std : : vector < std : : vector < double > > y_hat , std : : vector < std : : vector < double > > y , double delta ) ;
2023-01-23 21:13:26 +01:00
2023-01-24 19:00:54 +01:00
double HingeLoss ( std : : vector < double > y_hat , std : : vector < double > y ) ;
double HingeLoss ( std : : vector < std : : vector < double > > y_hat , std : : vector < std : : vector < double > > y ) ;
2023-01-23 21:13:26 +01:00
2023-01-24 19:00:54 +01:00
std : : vector < double > HingeLossDeriv ( std : : vector < double > y_hat , std : : vector < double > y ) ;
std : : vector < std : : vector < double > > HingeLossDeriv ( std : : vector < std : : vector < double > > y_hat , std : : vector < std : : vector < double > > y ) ;
2023-01-23 21:13:26 +01:00
2023-01-24 19:00:54 +01:00
double HingeLoss ( std : : vector < double > y_hat , std : : vector < double > y , std : : vector < double > weights , double C ) ;
double HingeLoss ( std : : vector < std : : vector < double > > y_hat , std : : vector < std : : vector < double > > y , std : : vector < std : : vector < double > > weights , double C ) ;
2023-01-23 21:13:26 +01:00
2023-01-24 19:00:54 +01:00
std : : vector < double > HingeLossDeriv ( std : : vector < double > y_hat , std : : vector < double > y , double C ) ;
std : : vector < std : : vector < double > > HingeLossDeriv ( std : : vector < std : : vector < double > > y_hat , std : : vector < std : : vector < double > > y , double C ) ;
2023-01-23 21:13:26 +01:00
2023-01-24 19:00:54 +01:00
double WassersteinLoss ( std : : vector < double > y_hat , std : : vector < double > y ) ;
double WassersteinLoss ( std : : vector < std : : vector < double > > y_hat , std : : vector < std : : vector < double > > y ) ;
2023-01-23 21:13:26 +01:00
2023-01-24 19:00:54 +01:00
std : : vector < double > WassersteinLossDeriv ( std : : vector < double > y_hat , std : : vector < double > y ) ;
std : : vector < std : : vector < double > > WassersteinLossDeriv ( std : : vector < std : : vector < double > > y_hat , std : : vector < std : : vector < double > > y ) ;
2023-01-23 21:13:26 +01:00
2023-01-24 19:00:54 +01:00
double dualFormSVM ( std : : vector < double > alpha , std : : vector < std : : vector < double > > X , std : : vector < double > y ) ; // TO DO: DON'T forget to add non-linear kernelizations.
2023-01-23 21:13:26 +01:00
2023-01-24 19:00:54 +01:00
std : : vector < double > dualFormSVMDeriv ( std : : vector < double > alpha , std : : vector < std : : vector < double > > X , std : : vector < double > y ) ;
2023-01-23 21:13:26 +01:00
2023-01-24 19:00:54 +01:00
private :
} ;
} //namespace MLPP
2023-01-23 21:13:26 +01:00
# endif /* Cost_hpp */