KernelEXPHIK.cpp 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. /**
  2. * @file KernelEXPHIK.cpp
  3. * @brief Interface for the generalized rbf kernel with HIK metric
  4. * @author Paul Bodesheim
  5. * @date 02/07/2013
  6. */
  7. #include <iostream>
  8. #include <math.h>
  9. #include "KernelEXPHIK.h"
  10. using namespace OBJREC;
  11. using namespace std;
  12. using namespace NICE;
  13. KernelEXPHIK::KernelEXPHIK ( double _gamma, double _alpha, double _beta ) : KernelHIK(_alpha, _beta)
  14. {
  15. gamma = _gamma;
  16. }
  17. KernelEXPHIK::KernelEXPHIK ( const KernelEXPHIK & src ) : KernelHIK(src.alpha, src.beta)
  18. {
  19. gamma = src.gamma;
  20. }
  21. KernelEXPHIK::KernelEXPHIK ( const KernelHIK & src, double _gamma ) : KernelHIK(src)
  22. {
  23. gamma = _gamma;
  24. }
  25. KernelEXPHIK::~KernelEXPHIK()
  26. {
  27. }
  28. KernelEXPHIK *KernelEXPHIK::clone(void) const
  29. {
  30. return new KernelEXPHIK ( *this );
  31. }
  32. double KernelEXPHIK::K (const NICE::Vector & x, const NICE::Vector & y) const
  33. {
  34. if ( x.size() != y.size() ) {
  35. cerr << "KernelEXPHIK: dimensions: " << x.size() << " vs " << y.size() << endl;
  36. fthrow(Exception, "Vector dimensions do not match!");
  37. }
  38. double dist = KernelHIK::K(x,x) + KernelHIK::K(y,y) - 2.0*KernelHIK::K(x,y);
  39. return exp(-gamma*dist);
  40. }
  41. void KernelEXPHIK::updateKernelData ( KernelData *kernelData ) const
  42. {
  43. NICE::Matrix & kernelMatrix = kernelData->getKernelMatrix();
  44. fthrow(Exception, "Not yet implemented!");
  45. }
  46. void KernelEXPHIK::getKernelJacobi ( size_t parameter, const NICE::Vector & parameters, const KernelData *kernelData, NICE::Matrix & jacobiMatrix ) const
  47. {
  48. fthrow(Exception, "Not yet implemented!");
  49. }
  50. void KernelEXPHIK::setParameters( const NICE::Vector & newParameters )
  51. {
  52. alpha = newParameters[0];
  53. beta = newParameters[1];
  54. gamma = newParameters[2];
  55. }
  56. void KernelEXPHIK::getParameters( NICE::Vector & newParameters ) const
  57. {
  58. newParameters.resize(3);
  59. newParameters[0] = alpha;
  60. newParameters[1] = beta;
  61. newParameters[2] = gamma;
  62. }