1 | #ifndef _theplu_classifier_polynomial_kernel_function_ |
---|

2 | #define _theplu_classifier_polynomial_kernel_function_ |
---|

3 | |
---|

4 | // $Id$ |
---|

5 | |
---|

6 | #include <c++_tools/classifier/KernelFunction.h> |
---|

7 | #include <c++_tools/classifier/DataLookup1D.h> |
---|

8 | |
---|

9 | |
---|

10 | #include <cmath> |
---|

11 | |
---|

12 | |
---|

13 | namespace theplu { |
---|

14 | namespace classifier { |
---|

15 | |
---|

16 | /// |
---|

17 | /// Class for polynomial kernel calculations |
---|

18 | /// |
---|

19 | |
---|

20 | |
---|

21 | class PolynomialKernelFunction : public KernelFunction |
---|

22 | { |
---|

23 | |
---|

24 | public: |
---|

25 | /// |
---|

26 | ///Constructor taking the order of the polynomial as input. Default is |
---|

27 | ///order=1 yielding the linear kernel function. |
---|

28 | /// |
---|

29 | PolynomialKernelFunction(int = 1); |
---|

30 | |
---|

31 | /// |
---|

32 | ///Destructor |
---|

33 | /// |
---|

34 | virtual ~PolynomialKernelFunction(void) {}; |
---|

35 | |
---|

36 | /// |
---|

37 | /// returning the scalar product of two vectors in feature space using the |
---|

38 | /// polynomial kernel. @return If order is larger than one: \f$ (1+x \cdot |
---|

39 | /// y)^{order} \f$ \n If order is one (linear): \f$ x \cdot y \f$ |
---|

40 | /// |
---|

41 | double operator()(const DataLookup1D& a1, const DataLookup1D& a2) const; |
---|

42 | |
---|

43 | /// |
---|

44 | /// @return If order is larger than one: \f$ (1+x \cdot y)^{order} |
---|

45 | /// \f$ \n If order is one (linear): \f$ \frac{\sum w_yxy} \f$ |
---|

46 | /// |
---|

47 | /// |
---|

48 | double operator()(const DataLookup1D& x, |
---|

49 | const DataLookupWeighted1D& y) const; |
---|

50 | /// |
---|

51 | /// returning the scalar product of two vectors in feature space |
---|

52 | /// using the polynomial kernel with weights. Having all weights |
---|

53 | /// equal to unity yields the same as non-weighted version. |
---|

54 | /// |
---|

55 | /// @return If order is larger than one: \f$ (1+x \cdot y)^{order} |
---|

56 | /// \f$ \n If order is one (linear): \f$ \sum w_xw_yxy} \f$ |
---|

57 | /// |
---|

58 | double operator()(const DataLookupWeighted1D& x, |
---|

59 | const DataLookupWeighted1D& y) const; |
---|

60 | |
---|

61 | |
---|

62 | private: |
---|

63 | int order_; |
---|

64 | |
---|

65 | }; // class PolynomialKernelFunction |
---|

66 | |
---|

67 | }} // of namespace classifier and namespace theplu |
---|

68 | |
---|

69 | #endif |
---|