|
@@ -0,0 +1,81 @@
|
|
|
+/**
|
|
|
+* @file KernelEXPHIK.cpp
|
|
|
+* @brief Interface for the generalized rbf kernel with HIK metric
|
|
|
+* @author Paul Bodesheim
|
|
|
+* @date 02/07/2013
|
|
|
+
|
|
|
+*/
|
|
|
+
|
|
|
+#include <iostream>
|
|
|
+
|
|
|
+#include <math.h>
|
|
|
+#include "KernelEXPHIK.h"
|
|
|
+
|
|
|
+using namespace OBJREC;
|
|
|
+
|
|
|
+using namespace std;
|
|
|
+using namespace NICE;
|
|
|
+
|
|
|
+KernelEXPHIK::KernelEXPHIK ( double _gamma, double _alpha, double _beta ) : KernelHIK(_alpha, _beta)
|
|
|
+{
|
|
|
+ gamma = _gamma;
|
|
|
+}
|
|
|
+
|
|
|
+KernelEXPHIK::KernelEXPHIK ( const KernelEXPHIK & src ) : KernelHIK(src.alpha, src.beta)
|
|
|
+{
|
|
|
+ gamma = src.gamma;
|
|
|
+}
|
|
|
+
|
|
|
+KernelEXPHIK::KernelEXPHIK ( const KernelHIK & src, double _gamma ) : KernelHIK(src)
|
|
|
+{
|
|
|
+ gamma = _gamma;
|
|
|
+}
|
|
|
+
|
|
|
+KernelEXPHIK::~KernelEXPHIK()
|
|
|
+{
|
|
|
+}
|
|
|
+
|
|
|
+KernelEXPHIK *KernelEXPHIK::clone(void) const
|
|
|
+{
|
|
|
+ return new KernelEXPHIK ( *this );
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+double KernelEXPHIK::K (const NICE::Vector & x, const NICE::Vector & y) const
|
|
|
+{
|
|
|
+ if ( x.size() != y.size() ) {
|
|
|
+ cerr << "KernelEXPHIK: dimensions: " << x.size() << " vs " << y.size() << endl;
|
|
|
+ fthrow(Exception, "Vector dimensions do not match!");
|
|
|
+ }
|
|
|
+
|
|
|
+ double dist = KernelHIK::K(x,x) + KernelHIK::K(y,y) - 2.0*KernelHIK::K(x,y);
|
|
|
+
|
|
|
+ return exp(-gamma*dist);
|
|
|
+}
|
|
|
+
|
|
|
+void KernelEXPHIK::updateKernelData ( KernelData *kernelData ) const
|
|
|
+{
|
|
|
+ NICE::Matrix & kernelMatrix = kernelData->getKernelMatrix();
|
|
|
+ fthrow(Exception, "Not yet implemented!");
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+void KernelEXPHIK::getKernelJacobi ( size_t parameter, const NICE::Vector & parameters, const KernelData *kernelData, NICE::Matrix & jacobiMatrix ) const
|
|
|
+{
|
|
|
+ fthrow(Exception, "Not yet implemented!");
|
|
|
+}
|
|
|
+
|
|
|
+void KernelEXPHIK::setParameters( const NICE::Vector & newParameters )
|
|
|
+{
|
|
|
+ alpha = newParameters[0];
|
|
|
+ beta = newParameters[1];
|
|
|
+ gamma = newParameters[2];
|
|
|
+}
|
|
|
+
|
|
|
+void KernelEXPHIK::getParameters( NICE::Vector & newParameters ) const
|
|
|
+{
|
|
|
+ newParameters.resize(3);
|
|
|
+ newParameters[0] = alpha;
|
|
|
+ newParameters[1] = beta;
|
|
|
+ newParameters[2] = gamma;
|
|
|
+}
|