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

.net编程

开发平台:

Java

  1. #ifndef example_set_h
  2. #define example_set_h 1
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include <iostream.h>
  6. #include <math.h>
  7. #include <time.h>
  8. #include "globals.h"
  9. /**
  10.  * Storage class for the examples
  11.  *
  12.  * This class stores the SVM examples and provides simple operations on it
  13.  * @li access to the attributes, classification and lagrangian multipliers
  14.  * @li reading and writing to file 
  15.  * @li scaling
  16.  * Attention! All access to the examples is call-by-reference.
  17.  *
  18.  * @author Stefan Rueping <rueping@ls8.cs.uni-dortmund.de>
  19.  * @version 0.1
  20.  **/
  21. class example_set_c{
  22.  private:
  23.   SVMINT examples_total; // number of examples in the set
  24.   SVMINT capacity; // capacity of the_set
  25.   svm_example* the_set; // Vector of examples, each a array of dim+2 SVMFLOATs (x,y,alpha)
  26.   SVMFLOAT b; // constant of hyperplane (f(x) = wx+b)
  27.   // Expectancy and variance, updated by scale(). Scale-factors may be needed later;
  28.   SVMFLOAT* Exp; // size dim+1, last entry: y
  29.   SVMFLOAT* Var;
  30.   int has_y, has_alphas, has_scale, has_pattern_y; // do y_i and alpha_i and Exp,Var have correct values? Are all y in {-1,1}?
  31.   SVMFLOAT* all_alphas;
  32.   SVMFLOAT* all_ys;
  33.   SVMINT dim; // dimensionality of the examples
  34.   char* filename; // name of file examples were read from
  35.   /** 
  36.    * really do the scaling work
  37.    **/
  38.   void do_scale();
  39.  public:
  40.   example_format my_format;
  41.   void set_filename(char* new_filename); // name of file examples were read from
  42.   char* get_filename(){ return(filename); };
  43.   friend istream& operator >> (istream& data_stream, example_set_c& examples);
  44.   friend ostream& operator << (ostream& data_stream, example_set_c& examples);
  45.   /**
  46.    * Constructor. Get Number of examples and dimensionality and set up data structures
  47.    *
  48.    **/
  49.   example_set_c();
  50.   example_set_c(SVMINT new_total, SVMINT new_dim);
  51.   void init(SVMINT new_total, SVMINT new_dim);
  52.   /**
  53.    * Destruktor: delete alle examples
  54.    */
  55.   ~example_set_c();
  56.   /**
  57.    *
  58.    * set the default file format
  59.    *
  60.    **/
  61.   void set_format(example_format new_format);
  62.   /**
  63.    *
  64.    * Set dimension (can be set higher, but not lower)
  65.    *
  66.    */
  67.   void set_dim(SVMINT new_dim);
  68.   SVMINT get_dim();
  69.   /**
  70.    * No of examples
  71.    **/
  72.   SVMINT size();
  73.   /*
  74.    * No. of positive / negative examples
  75.    */
  76.   SVMINT size_pos();
  77.   SVMINT size_neg();
  78.   /**
  79.    * Change the number of the examples. 
  80.    **/
  81.   void resize(SVMINT new_total);
  82.   void compress();
  83.   /**
  84.    * Access functions to the examples.
  85.    **/
  86.   void put_example(const SVMINT pos, const SVMFLOAT* example);
  87.   void put_example(const SVMFLOAT* example); // add one example
  88.   void put_example(const SVMINT pos, const svm_example example);
  89.   void put_example(const svm_example example); // add one example
  90.   svm_example get_example(const SVMINT pos);
  91.   void put_y(const SVMINT pos, const SVMFLOAT y);
  92.   SVMFLOAT get_y(const SVMINT pos); // input y
  93.   SVMFLOAT get_y_var();
  94.   SVMFLOAT unscale_y(const SVMFLOAT scaled_y);
  95.   void put_alpha(const SVMINT pos, const SVMFLOAT alpha);
  96.   SVMFLOAT get_alpha(const SVMINT pos);
  97.   void put_b(const SVMFLOAT new_b);
  98.   SVMFLOAT get_b();
  99.   SVMFLOAT* get_alphas();
  100.   SVMFLOAT* get_ys();
  101.   void put_Exp_Var(SVMFLOAT* newExp, SVMFLOAT* newVar);
  102.   void swap(SVMINT i, SVMINT j);
  103.   /**
  104.    * Are y and alpha initialised?
  105.    *
  106.    * When reading examples to predict or complete model
  107.    **/
  108.   int initialised_y(){ return has_y; };
  109.   int initialised_alpha(){ return has_alphas; };
  110.   int initialised_scale(){ return has_scale; };
  111.   int initialised_pattern_y(){ return has_pattern_y; };
  112.   /**
  113.    * Define alpha or y to be initialized
  114.    *
  115.    */
  116.   void set_initialised_y(){ has_y = 1; };
  117.   void set_initialised_alpha(){ has_alphas = 1; };
  118.   /**
  119.    * scale alphas (alpha -> factor*alpha)
  120.    **/
  121.   void scale_alphas(const SVMFLOAT factor);
  122.   /** 
  123.    * scale the attributes to expectancy 0 and deviation 1
  124.    **/
  125.   void scale();
  126.   void scale(int scale_y);
  127.   /** 
  128.    * scale first scaledim attributes to x[i] = (x[i] - const[i])/factor[i]
  129.    **/
  130.   void scale(SVMFLOAT *theconst, SVMFLOAT *thefactor,SVMINT scaledim);
  131.   /**
  132.    * get expectancy
  133.    */ 
  134.   SVMFLOAT* get_exp(){ return Exp; };
  135.   /**
  136.    * get variance
  137.    */
  138.   SVMFLOAT* get_var(){ return Var; };
  139.   /**
  140.    * clear all data
  141.    **/
  142.   void clear();
  143.   /**
  144.    * clear alpha values
  145.    **/
  146.   void clear_alpha();
  147.   /**
  148.    * Sum of all alphas, should be zero. (for debugging)
  149.    **/
  150.   SVMFLOAT sum();
  151.   /**
  152.    * permute the examples
  153.    */
  154.   void permute();
  155.   void output_ys(ostream& data_stream) const;
  156. };        
  157. ostream& operator<< (ostream& data_stream, example_set_c& examples);
  158. istream& operator>> (istream& data_stream, example_set_c& examples);
  159. #endif