Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef _COMMWORDSTRINGKERNEL_H___
00013 #define _COMMWORDSTRINGKERNEL_H___
00014
00015 #include "lib/common.h"
00016 #include "lib/Mathematics.h"
00017 #include "kernel/StringKernel.h"
00018
00019 namespace shogun
00020 {
00046 class CCommWordStringKernel : public CStringKernel<uint16_t>
00047 {
00048 friend class CVarianceKernelNormalizer;
00049 friend class CSqrtDiagKernelNormalizer;
00050 friend class CAvgDiagKernelNormalizer;
00051 friend class CRidgeKernelNormalizer;
00052 friend class CFirstElementKernelNormalizer;
00053 friend class CTanimotoKernelNormalizer;
00054 friend class CDiceKernelNormalizer;
00055
00056 public:
00062 CCommWordStringKernel(int32_t size, bool use_sign);
00063
00071 CCommWordStringKernel(
00072 CStringFeatures<uint16_t>* l, CStringFeatures<uint16_t>* r,
00073 bool use_sign=false, int32_t size=10);
00074
00075 virtual ~CCommWordStringKernel();
00076
00083 virtual bool init(CFeatures* l, CFeatures* r);
00084
00086 virtual void cleanup();
00087
00092 virtual EKernelType get_kernel_type() { return K_COMMWORDSTRING; }
00093
00098 virtual const char* get_name() const { return "CommWordString"; }
00099
00104 virtual bool init_dictionary(int32_t size);
00105
00113 virtual bool init_optimization(
00114 int32_t count, int32_t *IDX, float64_t* weights);
00115
00120 virtual bool delete_optimization();
00121
00127 virtual float64_t compute_optimized(int32_t idx);
00128
00134 virtual void add_to_normal(int32_t idx, float64_t weight);
00135
00137 virtual void clear_normal();
00138
00143 inline virtual EFeatureType get_feature_type() { return F_WORD; }
00144
00150 void get_dictionary(int32_t& dsize, float64_t*& dweights)
00151 {
00152 dsize=dictionary_size;
00153 dweights = dictionary_weights;
00154 }
00155
00168 virtual float64_t* compute_scoring(
00169 int32_t max_degree, int32_t& num_feat, int32_t& num_sym,
00170 float64_t* target, int32_t num_suppvec, int32_t* IDX,
00171 float64_t* alphas, bool do_init=true);
00172
00181 char* compute_consensus(
00182 int32_t &num_feat, int32_t num_suppvec, int32_t* IDX,
00183 float64_t* alphas);
00184
00189 void set_use_dict_diagonal_optimization(bool flag)
00190 {
00191 use_dict_diagonal_optimization=flag;
00192 }
00193
00198 bool get_use_dict_diagonal_optimization()
00199 {
00200 return use_dict_diagonal_optimization;
00201 }
00202
00203 protected:
00212 inline virtual float64_t compute(int32_t idx_a, int32_t idx_b)
00213 {
00214 return compute_helper(idx_a, idx_b, false);
00215 }
00216
00224 virtual float64_t compute_helper(
00225 int32_t idx_a, int32_t idx_b, bool do_sort);
00226
00232 virtual float64_t compute_diag(int32_t idx_a);
00233
00234 protected:
00236 int32_t dictionary_size;
00239 float64_t* dictionary_weights;
00240
00242 bool use_sign;
00243
00245 bool use_dict_diagonal_optimization;
00247 int32_t* dict_diagonal_optimization;
00248 };
00249 }
00250 #endif