00001 /* 00002 * This program is free software; you can redistribute it and/or modify 00003 * it under the terms of the GNU General Public License as published by 00004 * the Free Software Foundation; either version 3 of the License, or 00005 * (at your option) any later version. 00006 * 00007 * Written (W) 1999-2009 Soeren Sonnenburg 00008 * Copyright (C) 1999-2009 Fraunhofer Institute FIRST and Max-Planck-Society 00009 */ 00010 00011 #ifndef _GAUSSIANKERNEL_H___ 00012 #define _GAUSSIANKERNEL_H___ 00013 00014 #include "lib/common.h" 00015 #include "kernel/SimpleKernel.h" 00016 #include "features/SimpleFeatures.h" 00017 00018 namespace shogun 00019 { 00031 class CGaussianKernel: public CSimpleKernel<float64_t> 00032 { 00033 public: 00037 CGaussianKernel(); 00038 00044 CGaussianKernel(int32_t size, float64_t width); 00045 00053 CGaussianKernel(CSimpleFeatures<float64_t>* l, CSimpleFeatures<float64_t>* r, 00054 float64_t width, int32_t size=10); 00055 00056 virtual ~CGaussianKernel(); 00057 00064 virtual bool init(CFeatures* l, CFeatures* r); 00065 00070 virtual EKernelType get_kernel_type() { return K_GAUSSIAN; } 00071 00076 inline virtual const char* get_name() const { return "GaussianKernel"; } 00077 00078 protected: 00087 virtual float64_t compute(int32_t idx_a, int32_t idx_b); 00088 00089 #ifdef HAVE_BOOST_SERIALIZATION 00090 private: 00091 00092 friend class ::boost::serialization::access; 00093 template<class Archive> 00094 void serialize(Archive & ar, const unsigned int archive_version) 00095 { 00096 00097 SG_DEBUG("archiving GaussianKernel\n"); 00098 00099 ar & ::boost::serialization::base_object<CSimpleKernel<float64_t> >(*this); 00100 00101 ar & width; 00102 00103 SG_DEBUG("done with GaussianKernel\n"); 00104 00105 } 00106 #endif //HAVE_BOOST_SERIALIZATION 00107 00108 00109 protected: 00111 float64_t width; 00112 }; 00113 } 00114 #endif /* _GAUSSIANKERNEL_H__ */