SHOGUN  v3.2.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
VarianceKernelNormalizer.h
Go to the documentation of this file.
1 /*
2  * This program is free software; you can redistribute it and/or modify
3  * it under the terms of the GNU General Public License as published by
4  * the Free Software Foundation; either version 3 of the License, or
5  * (at your option) any later version.
6  *
7  * Written (W) 2009 Soeren Sonnenburg
8  * Copyright (C) 2009 Fraunhofer Institute FIRST and Max-Planck-Society
9  */
10 
11 #ifndef _VARIANCEKERNELNORMALIZER_H___
12 #define _VARIANCEKERNELNORMALIZER_H___
13 
15 
16 namespace shogun
17 {
28 {
29  public:
34  {
35  SG_ADD(&meandiff, "meandiff", "Scaling constant.", MS_AVAILABLE);
36  SG_ADD(&sqrt_meandiff, "sqrt_meandiff",
37  "Square root of scaling constant.", MS_AVAILABLE);
38  }
39 
42  {
43  }
44 
47  virtual bool init(CKernel* k)
48  {
49  ASSERT(k)
50  int32_t n=k->get_num_vec_lhs();
51  ASSERT(n>0)
52 
53  CFeatures* old_lhs=k->lhs;
54  CFeatures* old_rhs=k->rhs;
55  k->lhs=old_lhs;
56  k->rhs=old_lhs;
57 
58  float64_t diag_mean=0;
59  float64_t overall_mean=0;
60  for (int32_t i=0; i<n; i++)
61  {
62  diag_mean+=k->compute(i, i);
63 
64  for (int32_t j=0; j<n; j++)
65  overall_mean+=k->compute(i, j);
66  }
67  diag_mean/=n;
68  overall_mean/=((float64_t) n)*n;
69 
70  k->lhs=old_lhs;
71  k->rhs=old_rhs;
72 
73  meandiff=1.0/(diag_mean-overall_mean);
75 
76  return true;
77  }
78 
85  float64_t value, int32_t idx_lhs, int32_t idx_rhs)
86  {
87  return value*meandiff;
88  }
89 
94  virtual float64_t normalize_lhs(float64_t value, int32_t idx_lhs)
95  {
96  return value*sqrt_meandiff;
97  }
98 
103  virtual float64_t normalize_rhs(float64_t value, int32_t idx_rhs)
104  {
105  return value*sqrt_meandiff;
106  }
107 
109  virtual const char* get_name() const { return "VarianceKernelNormalizer"; }
110 
111  protected:
116 };
117 }
118 #endif
virtual float64_t normalize_lhs(float64_t value, int32_t idx_lhs)
virtual float64_t compute(int32_t x, int32_t y)=0
virtual float64_t normalize(float64_t value, int32_t idx_lhs, int32_t idx_rhs)
virtual int32_t get_num_vec_lhs()
Definition: Kernel.h:355
virtual const char * get_name() const
virtual float64_t normalize_rhs(float64_t value, int32_t idx_rhs)
#define ASSERT(x)
Definition: SGIO.h:203
double float64_t
Definition: common.h:48
The class Kernel Normalizer defines a function to post-process kernel values.
CFeatures * rhs
feature vectors to occur on right hand side
Definition: Kernel.h:706
CFeatures * lhs
feature vectors to occur on left hand side
Definition: Kernel.h:704
The class Features is the base class of all feature objects.
Definition: Features.h:62
The Kernel base class.
Definition: Kernel.h:150
#define SG_ADD(...)
Definition: SGObject.h:71
static float32_t sqrt(float32_t x)
x^0.5
Definition: Math.h:245
VarianceKernelNormalizer divides by the ``variance''.

SHOGUN Machine Learning Toolbox - Documentation