contrib/mul/clsfy/clsfy_adaboost_sorted_builder.h
Go to the documentation of this file.
00001 // This is mul/clsfy/clsfy_adaboost_sorted_builder.h
00002 // Copyright: (C) 2000 British Telecommunications plc
00003 #ifndef clsfy_adaboost_sorted_builder_h_
00004 #define clsfy_adaboost_sorted_builder_h_
00005 //:
00006 // \file
00007 // \brief Describe a concrete classifier
00008 // \author Ian Scott
00009 // \date 2000-05-10
00010 // \verbatim
00011 //  Modifications
00012 //   2 May 2001 IMS Converted to VXL
00013 // \endverbatim
00014 
00015 #include <clsfy/clsfy_builder_base.h>
00016 #include <vcl_vector.h>
00017 #include <vcl_string.h>
00018 #include <vcl_iosfwd.h>
00019 #include <mbl/mbl_data_wrapper.h>
00020 #include <vnl/vnl_vector.h>
00021 
00022 class clsfy_builder_1d;
00023 class clsfy_classifier_base;
00024 
00025 //: Base for classes to build clsfy_classifier_base objects
00026 class clsfy_adaboost_sorted_builder : public clsfy_builder_base
00027 {
00028   // Parameters of builder
00029 
00030   //: bool indicating whether or not to save data to disk.
00031   // NB useful to save data to disk, if don't have enough RAM
00032   // but also makes training very slow
00033   bool save_data_to_disk_;
00034 
00035   //: batch size
00036   // i.e. number of training examples held in RAM whilst sorting takes place
00037   int bs_;
00038 
00039   //: maximum number of classifiers found by Adaboost algorithm
00040   int max_n_clfrs_;
00041 
00042   //: pointer to 1d builder used to build each weak classifier
00043   clsfy_builder_1d* weak_builder_;
00044 
00045  public:
00046 
00047   // Dflt ctor
00048   clsfy_adaboost_sorted_builder();
00049 
00050   // Destructor
00051   virtual ~clsfy_adaboost_sorted_builder();
00052 
00053   //: Create empty model
00054   virtual clsfy_classifier_base* new_classifier() const;
00055 
00056   //: set batch size
00057   void set_batch_size(int bs) { bs_ = bs; }
00058 
00059   //: set save data to disk bool
00060   void set_save_data_to_disk(bool x) { save_data_to_disk_ = x; }
00061 
00062   //: set max_n_clfrs
00063   void set_max_n_clfrs(int max_n_clfrs) { max_n_clfrs_ = max_n_clfrs; }
00064 
00065   //: set weak builder ( a pointer is retained )
00066   void set_weak_builder(clsfy_builder_1d& weak_builder)
00067   { weak_builder_ = &weak_builder; }
00068 
00069   //: Build model from data
00070   // Return the mean error over the training set.
00071   // For many classifiers, you may use nClasses==1 to
00072   // indicate a binary classifier
00073   virtual double build(clsfy_classifier_base& model,
00074                        mbl_data_wrapper<vnl_vector<double> >& inputs,
00075                        unsigned nClasses,
00076                        const vcl_vector<unsigned> &outputs) const;
00077 
00078   //: Name of the class
00079   virtual vcl_string is_a() const;
00080 
00081   //: Name of the class
00082   virtual bool is_class(vcl_string const& s) const;
00083 
00084   //: Create a copy on the heap and return base class pointer
00085   virtual clsfy_builder_base* clone() const;
00086 
00087   //: Print class to os
00088   virtual void print_summary(vcl_ostream& os) const;
00089 
00090   //: Save class to binary file stream
00091   virtual void b_write(vsl_b_ostream& bfs) const;
00092 
00093   //: Load class from binary file stream
00094   virtual void b_read(vsl_b_istream& bfs);
00095 };
00096 
00097 //: Allows derived class to be loaded by base-class pointer
00098 void vsl_add_to_binary_loader(const clsfy_adaboost_sorted_builder& b);
00099 
00100 //: Binary file stream output operator for class reference
00101 void vsl_b_write(vsl_b_ostream& bfs, const clsfy_adaboost_sorted_builder& b);
00102 
00103 //: Binary file stream input operator for class reference
00104 void vsl_b_read(vsl_b_istream& bfs, clsfy_adaboost_sorted_builder& b);
00105 
00106 //: Stream output operator for class reference
00107 void vsl_print_summary(vcl_ostream& os,const clsfy_adaboost_sorted_builder& b);
00108 
00109 //: Stream output operator for class pointer
00110 void vsl_print_summary(vcl_ostream& os,const clsfy_adaboost_sorted_builder* b);
00111 
00112 //: Stream output operator for class reference
00113 vcl_ostream& operator<<(vcl_ostream& os,const clsfy_adaboost_sorted_builder& b);
00114 
00115 //: Stream output operator for class pointer
00116 vcl_ostream& operator<<(vcl_ostream& os,const clsfy_adaboost_sorted_builder* b);
00117 
00118 #endif // clsfy_adaboost_sorted_builder_h_