SHOGUN  3.2.1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Distance.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) 2006-2009 Christian Gehl
8  * Written (W) 2006-2009 Soeren Sonnenburg
9  * Copyright (C) 2006-2009 Fraunhofer Institute FIRST and Max-Planck-Society
10  */
11 
12 #ifndef _DISTANCE_H___
13 #define _DISTANCE_H___
14 
15 #include <shogun/lib/config.h>
16 
17 #include <stdio.h>
18 
19 #include <shogun/lib/common.h>
20 #include <shogun/io/File.h>
22 #include <shogun/base/SGObject.h>
25 #include <shogun/lib/SGMatrix.h>
26 
27 namespace shogun
28 {
29 class CFile;
30 class CMath;
31 class CFeatures;
32 
35 {
36  D_UNKNOWN = 0,
39  D_CANBERRA = 30,
41  D_GEODESIC = 50,
42  D_JENSEN = 60,
47  D_EUCLIDEAN = 110,
48  D_CHISQUARE = 120,
49  D_TANIMOTO = 130,
50  D_COSINE = 140,
51  D_BRAYCURTIS = 150,
52  D_CUSTOM = 160,
55  D_DIRECTOR = 190,
57 };
58 
59 
83 class CDistance : public CSGObject
84 {
85  public:
87  CDistance();
88 
96  virtual ~CDistance();
97 
105  virtual float64_t distance(int32_t idx_a, int32_t idx_b);
106 
120  virtual float64_t distance_upper_bounded(int32_t idx_a, int32_t idx_b, float64_t upper_bound)
121  {
122  return distance(idx_a, idx_b);
123  }
124 
130  {
131  return get_distance_matrix<float64_t>();
132  }
133 
138  template <class T> SGMatrix<T> get_distance_matrix();
139 
146  int32_t compute_row_start(int64_t offs, int32_t n, bool symmetric)
147  {
148  int32_t i_start;
149 
150  if (symmetric)
151  i_start=(int32_t) CMath::floor(n-CMath::sqrt(CMath::sq((float64_t) n)-offs));
152  else
153  i_start=(int32_t) (offs/int64_t(n));
154 
155  return i_start;
156  }
157 
162  template <class T> static void* get_distance_matrix_helper(void* p);
163 
173  virtual bool init(CFeatures* lhs, CFeatures* rhs);
174 
179  virtual void cleanup()=0;
180 
185  void load(CFile* loader);
186 
191  void save(CFile* writer);
192 
197  inline CFeatures* get_lhs() { SG_REF(lhs); return lhs; };
198 
203  inline CFeatures* get_rhs() { SG_REF(rhs); return rhs; };
204 
214 
224 
226  virtual void remove_lhs_and_rhs();
227 
229  virtual void remove_lhs();
230 
232  virtual void remove_rhs();
233 
240  virtual EDistanceType get_distance_type()=0 ;
241 
248  virtual EFeatureType get_feature_type()=0;
249 
256  virtual EFeatureClass get_feature_class()=0;
257 
263  inline bool get_precompute_matrix() { return precompute_matrix ; }
264 
270  virtual void set_precompute_matrix(bool flag)
271  {
272  precompute_matrix=flag;
273 
274  if (!precompute_matrix)
275  {
276  SG_FREE(precomputed_matrix);
277  precomputed_matrix=NULL;
278  }
279  }
280 
285  virtual int32_t get_num_vec_lhs()
286  {
287  return num_lhs;
288  }
289 
294  virtual int32_t get_num_vec_rhs()
295  {
296  return num_rhs;
297  }
298 
303  virtual bool has_features()
304  {
305  return lhs && rhs;
306  }
307 
312  inline bool lhs_equals_rhs()
313  {
314  return lhs==rhs;
315  }
316 
317  protected:
318 
320  static void* run_distance_thread(void* p);
321 
325  virtual float64_t compute(int32_t idx_a, int32_t idx_b)=0;
326 
328  void do_precompute_matrix();
329 
330  private:
331  void init();
332 
333  protected:
338 
343 
348 
350  int32_t num_lhs;
352  int32_t num_rhs;
353 
354 };
355 } // namespace shogun
356 #endif
virtual EFeatureClass get_feature_class()=0
void do_precompute_matrix()
matrix precomputation
Definition: Distance.cpp:227
virtual bool has_features()
Definition: Distance.h:303
virtual void cleanup()=0
Class Distance, a base class for all the distances used in the Shogun toolbox.
Definition: Distance.h:83
CFeatures * get_lhs()
Definition: Distance.h:197
virtual int32_t get_num_vec_lhs()
Definition: Distance.h:285
CFeatures * replace_lhs(CFeatures *lhs)
Definition: Distance.cpp:167
static T sq(T x)
x^2
Definition: Math.h:324
virtual void remove_lhs()
takes all necessary steps if the lhs is removed from distance matrix
Definition: Distance.cpp:130
int32_t num_rhs
Definition: Distance.h:352
virtual EDistanceType get_distance_type()=0
virtual ~CDistance()
Definition: Distance.cpp:70
CFeatures * get_rhs()
Definition: Distance.h:203
static void * run_distance_thread(void *p)
run distance thread
virtual float64_t distance_upper_bounded(int32_t idx_a, int32_t idx_b, float64_t upper_bound)
Definition: Distance.h:120
bool get_precompute_matrix()
Definition: Distance.h:263
static float64_t floor(float64_t d)
Definition: Math.h:293
EFeatureClass
shogun feature class
Definition: FeatureTypes.h:38
bool lhs_equals_rhs()
Definition: Distance.h:312
virtual void set_precompute_matrix(bool flag)
Definition: Distance.h:270
EDistanceType
Definition: Distance.h:34
Class SGObject is the base class of all shogun objects.
Definition: SGObject.h:98
virtual void remove_lhs_and_rhs()
Definition: Distance.cpp:119
double float64_t
Definition: common.h:50
void save(CFile *writer)
Definition: Distance.cpp:113
#define SG_REF(x)
Definition: SGRefObject.h:34
A File access base class.
Definition: File.h:35
void load(CFile *loader)
Definition: Distance.cpp:107
virtual int32_t get_num_vec_rhs()
Definition: Distance.h:294
int32_t num_lhs
Definition: Distance.h:350
CFeatures * replace_rhs(CFeatures *rhs)
Definition: Distance.cpp:145
float float32_t
Definition: common.h:49
EFeatureType
shogun feature type
Definition: FeatureTypes.h:19
int32_t compute_row_start(int64_t offs, int32_t n, bool symmetric)
Definition: Distance.h:146
virtual float64_t distance(int32_t idx_a, int32_t idx_b)
Definition: Distance.cpp:189
bool precompute_matrix
Definition: Distance.h:342
CFeatures * lhs
feature vectors to occur on the left hand side
Definition: Distance.h:345
The class Features is the base class of all feature objects.
Definition: Features.h:68
CFeatures * rhs
feature vectors to occur on the right hand side
Definition: Distance.h:347
virtual EFeatureType get_feature_type()=0
SGMatrix< float64_t > get_distance_matrix()
Definition: Distance.h:129
float32_t * precomputed_matrix
Definition: Distance.h:337
static float32_t sqrt(float32_t x)
x^0.5
Definition: Math.h:330
virtual void remove_rhs()
takes all necessary steps if the rhs is removed from distance matrix
Definition: Distance.cpp:138
static void * get_distance_matrix_helper(void *p)
Definition: Distance.cpp:266
virtual float64_t compute(int32_t idx_a, int32_t idx_b)=0

SHOGUN Machine Learning Toolbox - Documentation