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_