Kernel.cpp 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. /**
  2. * @file Kernel.cpp
  3. * @brief Interface for Mercer Kernels
  4. * @author Erik Rodner
  5. * @date 10/24/2007
  6. */
  7. #ifdef NOVISUAL
  8. #include <vislearning/nice_nonvis.h>
  9. #else
  10. #include <vislearning/nice.h>
  11. #endif
  12. #include <iostream>
  13. #include "Kernel.h"
  14. using namespace OBJREC;
  15. using namespace std;
  16. using namespace NICE;
  17. Kernel::Kernel( bool _symmetric )
  18. {
  19. symmetric = _symmetric;
  20. }
  21. Kernel::~Kernel()
  22. {
  23. }
  24. void Kernel::calcGramMatrix ( const VVector & vecSet, NICE::Matrix & G ) const
  25. {
  26. G.resize(vecSet.size(), vecSet.size());
  27. if ( symmetric )
  28. {
  29. int ii = 0;
  30. for ( VVector::const_iterator i = vecSet.begin();
  31. i != vecSet.end();
  32. i++, ii++ )
  33. {
  34. const NICE::Vector & x = *i;
  35. int jj = ii;
  36. for ( VVector::const_iterator j = i;
  37. j != vecSet.end();
  38. j++, jj++ )
  39. {
  40. const NICE::Vector & y = *j;
  41. double kval = K(x,y);
  42. G(ii, jj) = kval;
  43. G(jj, ii) = kval;
  44. }
  45. }
  46. } else {
  47. int ii = 0;
  48. for ( VVector::const_iterator i = vecSet.begin();
  49. i != vecSet.end();
  50. i++, ii++ )
  51. {
  52. const NICE::Vector & x = *i;
  53. int jj = 0;
  54. for ( VVector::const_iterator j = vecSet.begin();
  55. j != vecSet.end();
  56. j++, jj++ )
  57. {
  58. const NICE::Vector & y = *j;
  59. double kval = K(x,y);
  60. G(ii, jj) = kval;
  61. }
  62. }
  63. }
  64. }
  65. void Kernel::calcKernelVector ( const VVector & vecSet, const NICE::Vector & y, NICE::Vector & kstar ) const
  66. {
  67. kstar.resize(vecSet.size());
  68. int ii = 0;
  69. for ( VVector::const_iterator i = vecSet.begin();
  70. i != vecSet.end();
  71. i++, ii++ )
  72. {
  73. const NICE::Vector & x = *i;
  74. double kval = K(x, y);
  75. kstar[ii] = kval;
  76. }
  77. }
  78. void Kernel::calcKernelData ( const VVector & vecSet, KernelData *kernelData ) const
  79. {
  80. cerr << "Kernel::calcKernelData()" << endl;
  81. NICE::Matrix & kernelMatrix = kernelData->getKernelMatrix();
  82. calcGramMatrix ( vecSet, kernelMatrix );
  83. }
  84. Kernel *Kernel::clone(void) const
  85. {
  86. fthrow(Exception, "clone() not yet implemented.");
  87. }