kernel.h
上传用户:xgw_05
上传日期:2014-12-08
资源大小:2726k
文件大小:9k
源码类别:

.net编程

开发平台:

Java

  1. #ifndef kernel_h
  2. #define kernel_h 1
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include <math.h>
  6. #include "globals.h"
  7. #include "example_set.h"
  8. #include "parameters.h"
  9. /**
  10.  * Base class for all kernels
  11.  * @li kernel caching
  12.  *
  13.  * @author Stefan Rueping <rueping@ls8.cs.uni-dortmund.de>
  14.  * @version 0.1
  15.  **/
  16. class kernel_c{
  17.  protected:
  18.   SVMINT cache_access;
  19.   SVMINT cache_misses;
  20.   SVMINT counter;  // time index for last access
  21.   SVMINT cache_size;  // number of rows in cache
  22.   SVMINT cache_mem;   // max. size of memory for cache
  23.   SVMINT examples_size;  // length of a row
  24.   SVMFLOAT** rows;
  25.   SVMINT* last_used; // the heap
  26.   SVMINT* index;
  27.   void clean_cache();
  28.   // little helpers
  29.   SVMFLOAT innerproduct(const svm_example x, const svm_example y);
  30.   SVMFLOAT norm2(const svm_example x, const svm_example y);
  31.   example_set_c *the_examples;
  32.  public:
  33.   SVMINT dim;
  34.   // caching based on i
  35.   friend istream& operator >> (istream& data_stream, kernel_c& the_kernel);
  36.   friend ostream& operator << (ostream& data_stream, kernel_c& the_kernel);
  37.   virtual void input(istream& data_stream);
  38.   virtual void output(ostream& data_stream) const;
  39.   kernel_c();
  40.   virtual ~kernel_c();
  41.   virtual void init(SVMINT new_cache_MB,example_set_c* new_examples);
  42.   void set_examples_size(SVMINT new_examples_size);
  43.   int cached(const SVMINT i);
  44.   int check();
  45.   virtual void overwrite(const SVMINT i, const SVMINT j);
  46.   SVMINT lookup(const SVMINT i);
  47.   virtual SVMFLOAT calculate_K(const SVMINT i, const SVMINT j);
  48.   virtual SVMFLOAT calculate_K(const svm_example x, const svm_example y);
  49.   SVMFLOAT* get_row(const SVMINT i); // returned pointer will not be manipulated
  50.   virtual void compute_row(const SVMINT i, SVMFLOAT* row);
  51. };
  52. istream& operator >> (istream& data_stream, kernel_c& the_kernel);
  53. ostream& operator << (ostream& data_stream, kernel_c& the_kernel);
  54. class kernel_dot_c : public kernel_c{
  55.  public:
  56.   kernel_dot_c(){};
  57.   virtual void input(istream& data_stream);
  58.   virtual void output(ostream& data_stream) const;
  59.   virtual SVMFLOAT calculate_K(const svm_example x, const svm_example y);
  60. };
  61. class kernel_lin_dot_c : public kernel_c{
  62.  protected:
  63.   SVMFLOAT a;
  64.   SVMFLOAT b;
  65.  public:
  66.   kernel_lin_dot_c(){ a=1; b=0; };
  67.   virtual void input(istream& data_stream);
  68.   virtual void output(ostream& data_stream) const;
  69.   virtual SVMFLOAT calculate_K(const svm_example x, const svm_example y);
  70. };
  71. class kernel_polynomial_c : public kernel_c{
  72.  protected:
  73.   SVMINT degree;
  74.  public:
  75.   kernel_polynomial_c(){};
  76.   virtual void input(istream& data_stream);
  77.   virtual void output(ostream& data_stream) const;
  78.   virtual SVMFLOAT calculate_K(const svm_example x, const svm_example y);
  79. };
  80. class kernel_radial_c : public kernel_c{
  81.  protected:
  82.   SVMFLOAT gamma;
  83.  public:
  84.   kernel_radial_c(){};
  85.   virtual void input(istream& data_stream);
  86.   virtual void output(ostream& data_stream) const;
  87.   virtual SVMFLOAT calculate_K(const svm_example x, const svm_example y);
  88. };
  89. class kernel_neural_c : public kernel_c{
  90.  protected:
  91.   SVMFLOAT a,b;
  92.  public:
  93.   kernel_neural_c(){};
  94.   virtual void input(istream& data_stream);
  95.   virtual void output(ostream& data_stream) const;
  96.   virtual SVMFLOAT calculate_K(const svm_example x, const svm_example y);
  97. };
  98. class kernel_anova_c : public kernel_c{
  99.  protected:
  100.   SVMINT degree;
  101.   SVMFLOAT gamma;
  102.  public:
  103.   kernel_anova_c(){};
  104.   virtual void input(istream& data_stream);
  105.   virtual void output(ostream& data_stream) const;
  106.   virtual SVMFLOAT calculate_K(const svm_example x, const svm_example y);
  107. };
  108. class kernel_exponential_c : public kernel_c{
  109.  protected:
  110.   SVMFLOAT lambda;
  111.  public:
  112.   kernel_exponential_c(){};
  113.   virtual void input(istream& data_stream);
  114.   virtual void output(ostream& data_stream) const;
  115.   virtual SVMFLOAT calculate_K(const svm_example x, const svm_example y);
  116. };
  117. class kernel_user_c : public kernel_c{
  118.  protected:
  119.   SVMINT param_i_1, param_i_2, param_i_3, param_i_4, param_i_5;
  120.   SVMFLOAT param_f_1, param_f_2, param_f_3, param_f_4, param_f_5;
  121.  public:
  122.   kernel_user_c();
  123.   virtual void input(istream& data_stream);
  124.   virtual void output(ostream& data_stream) const;
  125.   virtual SVMFLOAT calculate_K(const svm_example x, const svm_example y);
  126. };
  127. class kernel_user2_c : public kernel_c{
  128.  protected:
  129.   SVMINT number_param;
  130.   SVMINT* param_i;
  131.   SVMFLOAT* param_f;
  132.  public:
  133.   kernel_user2_c();
  134.   ~kernel_user2_c();
  135.   virtual void input(istream& data_stream);
  136.   virtual void output(ostream& data_stream) const;
  137.   virtual SVMFLOAT calculate_K(const svm_example x, const svm_example y);
  138. };
  139. class kernel_zero_c : public kernel_c{
  140.  public:
  141.   void input(istream& data_stream);
  142.   void output(ostream& data_stream) const;
  143.   virtual SVMFLOAT calculate_K(const svm_example x, const svm_example y);
  144. };
  145. class kernel_fourier_c : public kernel_c{
  146.  protected:
  147.   SVMINT N;
  148.  public:
  149.   kernel_fourier_c();
  150.   void input(istream& data_stream);
  151.   void output(ostream& data_stream) const;
  152.   virtual SVMFLOAT calculate_K(const svm_example x, const svm_example y);
  153. };
  154. class kernel_reg_fourier_c : public kernel_c{
  155.  protected:
  156.   SVMFLOAT q;
  157.  public:
  158.   kernel_reg_fourier_c();
  159.   void input(istream& data_stream);
  160.   void output(ostream& data_stream) const;
  161.   virtual SVMFLOAT calculate_K(const svm_example x, const svm_example y);
  162. };
  163. class kernel_lintransform_c : public kernel_c{
  164.  protected:
  165.   kernel_c* subkernel;
  166.   SVMFLOAT a,b;
  167.  public:
  168.   kernel_lintransform_c();
  169.   ~kernel_lintransform_c();
  170.   void input(istream& data_stream);
  171.   void output(ostream& data_stream) const;
  172.   virtual SVMFLOAT calculate_K(const svm_example x, const svm_example y);
  173. };
  174. class kernel_subseq_c : public kernel_c{
  175.  protected:
  176.   SVMINT step;
  177.   SVMFLOAT lambda;
  178.   SVMFLOAT gamma;
  179.  public:
  180.   kernel_subseq_c();
  181.   ~kernel_subseq_c();
  182.   virtual void input(istream& data_stream);
  183.   virtual void output(ostream& data_stream) const;
  184.   virtual SVMFLOAT calculate_K(const svm_example x, const svm_example y);
  185. };
  186. class kernel_discrete_subseq_c : public kernel_c{
  187.  protected:
  188.   //  SVMINT step;
  189.   SVMINT length;
  190.   SVMFLOAT lambda;
  191.   SVMFLOAT diff;
  192.   svm_example the_x;
  193.   svm_example the_y;
  194.   virtual SVMFLOAT calculate_inner_K(const SVMINT size, const SVMINT end_x, const SVMINT end_y);
  195.   virtual SVMFLOAT calculate_inner_K_prime(const SVMINT size, const SVMINT end_x, const SVMINT end_y);
  196.  public:
  197.   kernel_discrete_subseq_c();
  198.   ~kernel_discrete_subseq_c();
  199.   virtual void input(istream& data_stream);
  200.   virtual void output(ostream& data_stream) const;
  201.   virtual SVMFLOAT calculate_K(const svm_example x, const svm_example y);
  202. };
  203. class kernel_regularized_c : public kernel_c{
  204.  protected:
  205.   SVMFLOAT* cache;
  206.   kernel_c* inner_kernel;
  207.  public:
  208.   kernel_regularized_c();
  209.   ~kernel_regularized_c();
  210.   void input(istream& data_stream);
  211.   void output(ostream& data_stream) const;
  212.   virtual SVMFLOAT calculate_K(const svm_example x, const svm_example y);
  213.   virtual void compute_row(const SVMINT i, SVMFLOAT* row);
  214.   virtual void init(SVMINT new_cache_MB,example_set_c* new_examples);
  215.   virtual void overwrite(const SVMINT i, const SVMINT j);
  216. };
  217. class kernel_complete_matrix_c : public kernel_c{
  218.  protected:
  219.   SVMFLOAT* matrix;
  220.   kernel_c* inner_kernel;
  221.   SVMINT calc_index(const SVMINT i, const SVMINT j);
  222.   SVMINT safe_calc_index(const SVMINT i, const SVMINT j);
  223.  public:
  224.   kernel_complete_matrix_c();
  225.   ~kernel_complete_matrix_c();
  226.   void input(istream& data_stream);
  227.   void output(ostream& data_stream) const;
  228.   virtual void compute_row(const SVMINT i, SVMFLOAT* myrow);
  229.   virtual SVMFLOAT calculate_K(const SVMINT i, const SVMINT j);
  230.   virtual SVMFLOAT calculate_K(const svm_example x, const svm_example y);
  231.   virtual void init(SVMINT new_cache_MB,example_set_c* new_examples);
  232.   virtual void overwrite(const SVMINT i, const SVMINT j);
  233. };
  234. class kernel_aggregation_c : public kernel_c{
  235.  protected:
  236.   SVMINT number_elements;
  237.   kernel_c** elements;
  238.   SVMINT* from;
  239.   SVMINT* to;
  240.   svm_example new_x, new_y;
  241.  public:
  242.   kernel_aggregation_c();
  243.   ~kernel_aggregation_c();
  244.   virtual void init(SVMINT new_cache_MB,example_set_c* new_examples);
  245.   void input(istream& data_stream);
  246.   void output(ostream& data_stream) const;
  247.   void output_aggregation(ostream& data_stream) const;
  248.   virtual SVMFLOAT calculate_K(const svm_example x, const svm_example y);
  249. };
  250. class kernel_prod_aggregation_c : public kernel_aggregation_c{
  251.  public:
  252.   kernel_prod_aggregation_c();
  253.   ~kernel_prod_aggregation_c();
  254.   void output(ostream& data_stream) const;
  255.   virtual SVMFLOAT calculate_K(const svm_example x, const svm_example y);
  256. };
  257. // container class
  258. class kernel_container_c{
  259.  protected:
  260.   kernel_c* kernel;
  261.  public:
  262.   friend istream& operator >> (istream& data_stream, kernel_container_c& the_container);
  263.   friend ostream& operator << (ostream& data_stream, kernel_container_c& the_container);
  264.   kernel_container_c(){ kernel = 0; };
  265.   ~kernel_container_c();
  266.   kernel_c* get_kernel();
  267.   void clear();
  268.   int is_linear; // dot-kernel?
  269. };
  270. #endif